计算string中的单词

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。

编辑:

我发现(感谢Blender)我可以用更less的代码来做到这一点:

 function WordCount(str) { return str.split(" ").length; } console.log(WordCount("hello world")); 

使用方括号,而不是括号:

 str[i] === " " 

或者charAt

 str.charAt(i) === " " 

你也可以用.split()做到这一点:

 return str.split(' ').length; 

尝试这些之前重新发明轮子

从计数string中使用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; } 

来自作者的注释:

您可以根据自己的喜好调整此脚本来计算单词。 重要的部分是s.split('').length – 这个数字是空格。 该脚本在计数之前尝试删除所有多余的空格(双空格等)。 如果文本中包含两个没有空格的单词,则将其统计为一个单词,例如“第一句,下一句的开始”。

还有一种方法来计算string中的单词。 此代码计算仅包含字母数字字符和'_'字符的单词。

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

清理完string后,可以匹配非空白字符或单词边界。

这里有两个简单的正则expression式来捕捉string中的单词:

  • 非空格字符序列: /\S+/g
  • 字边界之间的有效字符: /\b[az\d]+\b/g

以下示例显示了如何使用这些捕获模式从string中检索字数。

 /*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[az\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; } 

我认为这种方法比你想要的更多

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

到目前为止我发现的最简单的方法是使用正则expression式。

 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 

String.prototype.match返回一个数组,然后我们可以检查长度,

我觉得这个方法是最具描述性的

 var str = 'one two three four five'; str.match(/\w+/g).length; 

@ 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; } 
 <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> 

我知道它晚了,但这个正则expression式应该可以解决你的问题。 这将匹配并返回string中的单词数量。 而不是那个你标记为解决scheme的人,即使它只有一个单词,也会将空间空间单词计为两个单词。

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

你的代码中有一些错误。

 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")); 

使用正则expression式有另一种简单的方法:

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

确切的值可以不同的大约1个字,但它也计算没有空间的单词边界,例如“word-word.word”。 它不包括不包含字母或数字的单词。

可能有一个更有效的方法来做到这一点,但这是我的工作。

 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个单词,

(一些其他的build议,我试过每个例子以上只有1个字)它也是:

  • 忽略所有前导空白和尾随空白

  • 统计单个字母后跟一个新行,作为一个单词 – 我发现这个页面给出的一些build议不计算在内,例如:
    一个
    一个
    一个
    一个
    一个
    有时会被计为0 x个字,其他函数只计算为1个字,而不是5个字)

如果任何人有任何想法如何改善,或更清洁/更有效率 – 那么请加2美分! 希望这有助于某人。

这是一个函数,用于计算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