Подтвердить что ты не робот

Подсчет слов в строке

function WordCount(str) {
  var totalSoFar = 0;
  for (var i = 0; i < WordCount.length; i++)
    if (str(i) === " ") { // if a space is found in str
      totalSoFar = +1; // add 1 to total so far
  }
  totalsoFar += 1; // add 1 to totalsoFar to account for extra space since 1 space = 2 words
}

console.log(WordCount("Random String"));

Я думаю, что у меня все получилось, но я думаю, что инструкция if неверна. Как я могу сказать, что if(str(i) содержит пробел, добавьте 1.

Edit:

Я узнал (спасибо Blender), что могу сделать это с гораздо меньшим количеством кода:

function WordCount(str) { 
  return str.split(" ").length;
}

console.log(WordCount("hello world"));
4b9b3361

Ответ 1

Используйте квадратные скобки, а не круглые скобки:

str[i] === " "

Или charAt:

str.charAt(i) === " "

Вы также можете сделать это с помощью .split():

return str.split(' ').length;

Ответ 2

Попробуйте сделать это, прежде чем изобретать колеса

from Подсчитать количество слов в строке с использованием JavaScript

function countWords(str) {
  return str.trim().split(/\s+/).length;
}

из http://www.mediacollege.com/internet/javascript/text/count-words.html

function countWords(s){
    s = s.replace(/(^\s*)|(\s*$)/gi,"");//exclude  start and end white-space
    s = s.replace(/[ ]{2,}/gi," ");//2 or more space to 1
    s = s.replace(/\n /,"\n"); // exclude newline with a start spacing
    return s.split(' ').length; 
}

Примечания от автора:

Вы можете адаптировать этот script для подсчета слов в зависимости от того, что вам нравится. Важной частью является s.split('').length - это считается пространства.     script пытается удалить все лишние пробелы (пробелы и т.д.) Перед подсчетом.     Если текст содержит два слова без пробела между ними, он будет считать их одним словом, например. "Первое предложение. Следующее предложение".

Ответ 3

Еще один способ подсчета слов в строке. Этот код подсчитывает слова, содержащие только буквенно-цифровые символы и "_" char.

function countWords(str) {
  var matches = str.match(/[\w\d]+/gi);
  return matches ? matches.length : 0;
}

Ответ 4

После очистки строки вы можете совместить символы без пробелов или границы слов.

Вот два простых регулярных выражения для записи слов в строке:

  • Последовательность символов небелого пробела: /\S+/g
  • Допустимые символы между границами слов: /\b[a-z\d]+\b/g

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

/*Redirect console output to HTML.*/document.body.innerHTML='';console.log=function(s){document.body.innerHTML+=s+'\n';};
/*String format.*/String.format||(String.format=function(f){return function(a){return f.replace(/{(\d+)}/g,function(m,n){return"undefined"!=typeof a[n]?a[n]:m})}([].slice.call(arguments,1))});

// ^ IGNORE CODE ABOVE ^
//   =================

// Clean and match sub-strings in a string.
function extractSubstr(str, regexp) {
    return str.replace(/[^\w\s]|_/g, '')
        .replace(/\s+/g, ' ')
        .toLowerCase().match(regexp) || [];
}

// Find words by searching for sequences of non-whitespace characters.
function getWordsByNonWhiteSpace(str) {
    return extractSubstr(str, /\S+/g);
}

// Find words by searching for valid characters between word-boundaries.
function getWordsByWordBoundaries(str) {
    return extractSubstr(str, /\b[a-z\d]+\b/g);
}

// Example of usage.
var edisonQuote = "I have not failed. I've just found 10,000 ways that won't work.";
var words1 = getWordsByNonWhiteSpace(edisonQuote);
var words2 = getWordsByWordBoundaries(edisonQuote);

console.log(String.format('"{0}" - Thomas Edison\n\nWord count via:\n', edisonQuote));
console.log(String.format(' - non-white-space: ({0}) [{1}]', words1.length, words1.join(', ')));
console.log(String.format(' - word-boundaries: ({0}) [{1}]', words2.length, words2.join(', ')));
body { font-family: monospace; white-space: pre; font-size: 11px; }

Ответ 5

Я думаю, что этот метод больше, чем вы хотите

var getWordCount = function(v){
    var matches = v.match(/\S+/g) ;
    return matches?matches.length:0;
}

Ответ 6

Самый простой способ, который я нашел до сих пор, - использовать регулярное выражение с разделом.

var calculate = function() {
  var string = document.getElementById('input').value;
  var length = string.split(/[^\s]+/).length - 1;
  document.getElementById('count').innerHTML = length;
};
<textarea id="input">My super text that does 7 words.</textarea>
<button onclick="calculate()">Calculate</button>
<span id="count">7</span> words

Ответ 7

String.prototype.match возвращает массив, мы можем проверить длину,

Я считаю, что этот метод является наиболее описательным

var str = 'one two three four five';

str.match(/\w+/g).length;

Ответ 8

Ответ, заданный @7-isnotbad, чрезвычайно близок, но не учитывает однословные строки. Здесь исправление, которое, по-видимому, учитывает все возможные комбинации слов, пробелов и строк новой строки.

function countWords(s){
    s = s.replace(/\n/g,' '); // newlines to space
    s = s.replace(/(^\s*)|(\s*$)/gi,''); // remove spaces from start + end
    s = s.replace(/[ ]{2,}/gi,' '); // 2 or more spaces to 1
    return s.split(' ').length; 
}

Ответ 9

<textarea name="myMessage" onkeyup="wordcount(this.value)"></textarea>
<script type="text/javascript">
var cnt;
function wordcount(count) {
var words = count.split(/\s/);
cnt = words.length;
var ele = document.getElementById('w_count');
ele.value = cnt;
}
document.write("<input type=text id=w_count size=4 readonly>");
</script>

Ответ 10

У вас есть некоторые ошибки в вашем коде.

function WordCount(str) {
    var totalSoFar = 0;
    for (var i = 0; i < str.length; i++) {
        if (str[i] === " ") {
            totalSoFar += 1;
        }
    }
    return totalSoFar + 1; // you need to return something.
}
console.log(WordCount("Random String"));

Существует еще один простой способ использования регулярных выражений:

(text.split(/\b/).length - 1) / 2

Точное значение может отличаться от 1 слова, но оно также учитывает границы слов без пробела, например "word-word.word". И он не учитывает слова, которые не содержат букв или цифр.

Ответ 11

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

function countWords(str) {
    var matches = str.match(/\S+/g);
    return matches ? matches.length : 0;
}

Ответ 12

Может быть более эффективный способ сделать это, но это то, что сработало для меня.

function countWords(passedString){
  passedString = passedString.replace(/(^\s*)|(\s*$)/gi, '');
  passedString = passedString.replace(/\s\s+/g, ' '); 
  passedString = passedString.replace(/,/g, ' ');  
  passedString = passedString.replace(/;/g, ' ');
  passedString = passedString.replace(/\//g, ' ');  
  passedString = passedString.replace(/\\/g, ' ');  
  passedString = passedString.replace(/{/g, ' ');
  passedString = passedString.replace(/}/g, ' ');
  passedString = passedString.replace(/\n/g, ' ');  
  passedString = passedString.replace(/\./g, ' '); 
  passedString = passedString.replace(/[\{\}]/g, ' ');
  passedString = passedString.replace(/[\(\)]/g, ' ');
  passedString = passedString.replace(/[[\]]/g, ' ');
  passedString = passedString.replace(/[ ]{2,}/gi, ' ');
  var countWordsBySpaces = passedString.split(' ').length; 
  return countWordsBySpaces;

}

его способность распознавать все следующие слова как отдельные слова:

abc,abc= 2 слова,
 abc/abc/abc= 3 слова (работает с обратной и обратной косой чертой),
 abc.abc= 2 слова,
 abc[abc]abc= 3 слова,
 abc;abc= 2 слова,

(некоторые другие предложения, которые я пробовал, подсчитывают каждый пример выше как только 1 x слово) это также:

  • игнорирует все начальные и конечные пробелы

  • подсчитывает одну букву, за которой следует новая строка, в качестве слова - я нашел некоторые предложения, приведенные на этой странице, не учитываются, например:





    иногда подсчитывается как 0 x слов, а другие функции считают только 1 x word вместо 5 x слов)

если у кого-нибудь есть идеи о том, как его улучшить, или более чистых/более эффективных - тогда, пожалуйста, добавьте 2 цента! Надежда Это помогает кому-то.

Ответ 13

Здесь функция, которая подсчитывает количество слов в HTML-коде:

$(this).val()
    .replace(/((&nbsp;)|(<[^>]*>))+/g, '') // remove html spaces and tags
    .replace(/\s+/g, ' ') // merge multiple spaces into one
    .trim() // trim ending and beginning spaces (yes, this is needed)
    .match(/\s/g) // find all spaces by regex
    .length // get amount of matches

Ответ 14

function countWords(str) {
    var regEx = /([^\u0000-\u007F]|\w)+/g;  
    return str.match(regEx).length;
}

Объяснение:

/([^\u0000-\u007F]|\w) соответствует символам слов - это замечательно → регулярное выражение делает тяжелый подъем для нас. (Этот шаблон основан на следующем ответе SO: fooobar.com/questions/38508/... by @Landeeyo)

+ соответствует всей строке ранее заданных символов слова, поэтому мы в основном группируем слова.

/g означает, что он продолжает искать до конца.

str.match(regEx) возвращает массив найденных слов - поэтому мы рассчитываем его длину.

Ответ 15

let leng = yourString.split(' ').filter(a => a.trim().length > 0).length