2009-11-17 2 views
0

Я недавно использовали модифицированный метод подсчета слов в JavaScript для моего сайта, так что он подсчитывает intial сумма слов в текстовое поле, но это не совсем работаетслово метод подсчета

function wordCounter(field,countfield) 
{ 
    var maxlimit = 200; 
    var wordcounter = maxlimit - information.value.split(' ').length; 
    for (x = 0; x < field.value.length; x++) 
    { 
     if(field.value.charAt(x) == " " && field.value.charAt(x-1) != " ") // Counts the spaces while ignoring double spaces, usually one in between each word. 
     { 
      wordcounter++ 
     } 

     if (wordcounter > 250) 
     { 
      field.value = field.value.substring(0, x); 
     } 
     else 
     { 
      countfield.value = maxlimit - wordcounter; 
     } 
    } 
} 

ответ

5

данной строка "s", вы делаете это:

var numWords = s.replace(/^\s+|\s+$/g,"").split(/\s+/).length; 

Это разделяет строку на всех пробелах (пробелы, разрывы строк и т. Д.), Также работает с несколькими пробелами и т. Д. EDIT: добавлена ​​встроенная обрезка для удаления пробелов с начала и конца.

+0

по какой-то нечетной причине, независимо от того, какое решение я использую, он добавляет два к счету, а не один –

+0

Крошечная проблема: это будет завышать количество слов, если вход оставлен с пробельным символом. – richardtallent

+0

richardtallent-спасибо за замечание, правильно, добавлена ​​встроенная обрезка, чтобы исправить. – Jaanus

1

Простой способ было бы подсчитать количество пробелов и добавить 1.

Edit: добавить пример

Это по существу делает это. Разделение на пробелы

var str = 'adfs asdf a asdf'; 
alert(str.split(/\s+/).length); 
+0

Ну, и добавьте 1 к конечному результату. ;-) –

+0

Это +1, +1 это. –

+1

Вы можете даже усовершенствовать это, чтобы избежать множества пробелов, считающихся как больше слов. Это было бы простым вопросом поиска вашей строки и замены любых экземпляров '__' на' _' (конечно, замените пробелы для подчеркивания). Когда все экземпляры нескольких пробелов обрабатываются, подсчитывайте пробелы. Разумеется, это не идеально, но автоматическое подсчет слов обычно является просто приличным приближением. –

3

Самое простое решение - подсчитать количество несвязанных пробелов символов (пробелы, табы и т. Д.), Плюс один.

RegEx:

\S\s 

JavaScript:

var str = "The fox jumped over the lazy dog."; 
var wordcount = str.match(/\S\s/g).length + 1; 

Обратите внимание, что я не использовал "\ s +", потому что не нужно матча все пробельные, только пробельных символы, которые появляются после пробела. Это имеет два преимущества:

  1. Немного меньшие накладные расходы, когда строка имеет много дублирующихся пробельных символов.
  2. Не будет возвращено лишнего слова в счете, если вход начинается со пробела.

Многие ответы здесь используют split(). Единственное преимущество split() заключается не в том, чтобы добавить 1 к ответу, но IMHO, match() - лучший ответ, потому что код более читабельен. Цель кода - найти границы слов, а не разбить слова.

Кроме того, хотя матч() и сплит() возвращают массивы, матч() имеют меньший расход памяти, по двум причинам:

  • Один меньше элемент (не имеет большое значение)
  • Это только возвращает два символа в каждом элементе массива (может быть существенными)
+1

Мне просто нравится версия split(), потому что она семантически более приятна, она действительно подсчитывает слова, и вам не нужно понимать, почему в конце есть +1. Кроме того, этот код дает неверный результат, если строка правильно заполнена пробелом. – Jaanus

0

x = "a b f d"; alert ('x has' + x.split (/ \ s + /).длина + «слова»)

0

Я не уверен, если я понимаю, что именно вам нужно (код, который вы вставили путает меня немного), но вот простая функция для подсчета слов:

var text = "1 2 3 4000"; 

function wordCounter(text) { 
    word_count = text.split(" "); 

    return word_count.length; 
} 

wordCounter(text); // returns 4 as expected 
+0

Это не будет разделено на вкладку, CR, LF и т. Д., Но должно быть, если OP имеет дело с многострочным текстом. Это также даст неверный ответ, если между словами или предложениями используются несколько пробелов (два пробела после полной остановки - это обычное несчастливое соглашение с некоторыми людьми). – richardtallent

+0

А, да, джед, моя вина. В любом случае версия RegEx проще и чище. –

Смежные вопросы