Сократить предложение до определенного количества слов

Как укорачивать предложение до определенного количества слов (NB, а не буквы)?

Я думал использовать split(" "), но как же мне подсчитать слова?

Например:

  • Javascript word count cut off = > Javascript word count
  • Want better search results? See our search tips! = > Want better search

Ответ 1

Вы можете использовать split [MDN] и join [MDN].

"Want better search results? See our search tips".split(" ").splice(0,3).join(" ")

Ответ 2

Вот функция "читать дальше", которую я написал для своего приложения Meteor. Он принимает параметр maxWords и удаляет HTML-теги с помощью метода jquery text().

Надеюсь, поможет!

function readMore(string, maxWords) {       
    var strippedString = $("<p>" + string + "</p>").text().trim();      
    var array = strippedString.split(" ");
    var wordCount = array.length;
    var string = array.splice(0, maxWords).join(" ");

    if(wordCount > maxWords) {
        string += "...";
    }

        return string ;
}

Ответ 3

Чистое решение с ES6, по умолчанию 10 слов

const truncate = (str, max = 10) => {
  const array = str.trim().split(' ');
  const ellipsis = array.length > max ? '...' : '';

  return array.slice(0, max).join(' ') + ellipsis;
};

Ответ 4

Разделение работает, как вы описали. Однако, если вы используете RegExp, вам не нужно разбить всю строку:

var str = "Lions and tigers and bears";
var exp = /[A-Z|a-z]+/g;

var a = exp.exec(str); // Lions
var b = exp.exec(str); // and
var c = exp.exec(str); // tigers