JQuery возвращает сначала 5 слов строки без запятых

Я пытаюсь вернуть первые 5 слов строки в читаемом формате, без разделителей слов или запятых. Я не уверен, что его регулярное выражение или что-то, но я не могу понять это, хотя его, вероятно, просто. Спасибо!

Посмотрите, что у меня есть до сих пор: http://jsfiddle.net/ccnokes/GktTd/

Это функция, которую я использую:

function getWords(string){
    var words = string.split(/\s+/).slice(1,5);
    return words;
}

Ответ 1

Единственное, что вам не хватает, это join()

Попробуйте следующее:

function getWords(str) {
    return str.split(/\s+/).slice(0,5).join(" ");
}

Это сделает что-то вроде:

var str = "This is a long string with more than 5 words.";
console.log(getWords(str)); // << outputs "This is a long string"

Посмотрите эту ссылку для дальнейшего объяснения .join(). функция в javascript. По существу - если вы не укажете аргумент, он использует разделитель по умолчанию ,, тогда как если вы его добавите (как я делаю в приведенном выше примере, предоставив " "), он будет использовать это вместо этого. почему вывод становится первым 5 словами, разделенными пробелом между ними.

Ответ 2

Эти запятые поступают из того, как вы выводите данные:

//write to DOM
$('<h2 />').text(getWords(str).join(' ')).appendTo('body');

Когда вы добавляете строку в getWords(str), javascript пытается преобразовать массив в строку - он делает это, присоединяя слова с запятыми. Если вы хотите присоединиться к ним с чем-то другим, используйте join.

Ответ 3

Решение Troy Alford работает, но имеет один недостаток. Если между словами будет больше одного пробела или новый символ строки (\n), он будет преобразован в одно пространство, например:

'jQuery - это multi-browser '

будет преобразован в

'jQuery - это многосерверный

Чтобы устранить эту проблему, мы можем использовать регулярное выражение для символа. Это может выглядеть так:

function getFirstWords(text, wordsAmount) {
  const arr = text.split(/\b/g);
  const arrItemsAmount = (/\b/.exec(text) && /\b/.exec(text).index) ?
                           wordsAmount * 2 :
                           wordsAmount * 2 - 1;
  return arr.slice(0, arrItemsAmount).join('');
}