计算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(/(( )|(<[^>]*>))+/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