Подстрока Javascript(); ограничение по слову, а не по символу

Я хотел бы ограничить substr словами, а не символами. Я думаю о регулярных выражениях и пробелах, но не знаю, как это осуществить.

Сценарий: Ограничьте абзац слов до 200 слов, используя javascript/jQuery.

var $postBody = $postBody.substr(' ',200); 

Это здорово, но разделяет слова пополам :) Заранее спасибо!


person Community    schedule 02.11.2009    source источник
comment
Это не имеет ничего общего с jQuery.   -  person Afshin Mehrabani    schedule 19.04.2013


Ответы (3)


если вас устраивает не совсем точное решение, вы можете просто вести текущий подсчет количества пробелов в тексте и считать, что оно равно количеству слов.

В противном случае я бы использовал split() для строки с " " в качестве разделителя, а затем подсчитывал размер массива, который возвращает разделение.

person Brian Schroth    schedule 02.11.2009
comment
Спасибо, ребята :) Теперь у меня есть отличный способ подсчитать, но с моими ограниченными способностями, как мне взять это и выплюнуть кусок текста, ограниченный 200 словами? Я могу получить общее количество пробелов, но не знаю, что с этим делать :) tnx. var $postLength = $postBody.split(/\s/).length - person ; 02.11.2009
comment
Вы хотите сказать, что если у вас есть фрагмент текста длиной, возможно, в 300 слов, вы хотели бы получить фрагмент, содержащий первые 200 слов? Функция split() вернет массив слов, вам просто нужно пройтись по нему и соединить вместе первые 200 элементов массива. Или, если вы использовали мое менее точное, но гораздо более быстрое начальное предложение, вы могли бы просто перебрать строку, подсчитывая количество символов пробела, и когда вы достигнете # 200, взять подстроку от начала до местоположения 200-го пробела. - person Brian Schroth; 02.11.2009
comment
Спасибо за помощь :) вот метод, который я придумал: var $i = 0; вар $maxWords = 50; var $postBody = $(#myDiv).text().split(' '); while($i ‹ $maxWords){ $(#results).append($postBody[$i] +); $я++; } - person ; 02.11.2009
comment
похоже, это сработает. Убедитесь, что вы даете ему несколько хороших тестовых примеров, чтобы убедиться, что он работает должным образом с несколькими пробелами подряд... и я бы обратил внимание на возможность выхода за пределы массива. Если длина postBody меньше $maxWords, кажется, что append($postBody[$i] + ) выйдет за границы массива, как только он достигнет длины тела сообщения. - person Brian Schroth; 02.11.2009

очень быстро и грязно

$("#textArea").val().split(/\s/).length
person Marek Karbarz    schedule 02.11.2009

Я полагаю, вам нужно учитывать пунктуацию и другие символы, не являющиеся словами, не пробелами. Вам нужно 200 слов, не считая пробелов и небуквенных символов.

var word_count = 0;
var in_word = false;

for (var x=0; x < text.length; x++) {
   if ( ... text[x] is a letter) {
      if (!in_word) word_count++;
      in_word = true;
   } else {
      in_word = false;
   }

   if (!in_word && word_count >= 200) ... cut the string at "x" position
}

Вы также должны решить, будете ли вы рассматривать цифры как слово, а отдельные буквы — как слово.

person Stephen Chung    schedule 28.03.2011