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('');
}