我正在尝试使用以下代码计算给定字符串中的单词数:
var t = document.getElementById('MSO_ContentTable').textContent;
if (t == undefined) {
var total = document.getElementById('MSO_ContentTable').innerText;
} else {
var total = document.getElementById('MSO_ContentTable').textContent;
}
countTotal = cword(total);
function cword(w) {
var count = 0;
var words = w.split(" ");
for (i = 0; i < words.length; i++) {
// inner loop -- do the count
if (words[i] != "") {
count += 1;
}
}
return (count);
}
在该代码中,我从div标签获取数据并将其发送到cword()
函数进行计数。虽然IE和Firefox的返回值不同。正则表达式中是否需要进行任何更改?有一件事我表明两个浏览器都发送了相同的字符串,cword()
函数内部存在问题。
答案 0 :(得分:15)
您可以使用split
并在String
原型中添加wordcounter:
String.prototype.countWords = function(){
return this.split(/\s+/).length;
}
'this string has five words'.countWords(); //=> 5
如果你想在一个句子中排除......或 - 之类的东西:
String.prototype.countWords = function(){
return this.split(/\s+\b/).length;
}
'this string has seven ... words - and counting'.countWords(); //=> 7
答案 1 :(得分:9)
我更喜欢仅限RegEx的解决方案:
var str = "your long string with many words.";
var wordCount = str.match(/(\w+)/g).length;
alert(wordCount); //6
正则表达式是
\w+ between one and unlimited word characters
/g greedy - don't stop after the first match
括号围绕每场比赛创建一个组。因此,所有匹配组的长度应与字数匹配。
答案 2 :(得分:3)
虽然你没有替换任何东西,但你可以巧妙地使用replace()方法。
var str = "the very long text you have...";
var counter = 0;
// lets loop through the string and count the words
str.replace(/(\b+)/g,function (a) {
// for each word found increase the counter value by 1
counter++;
})
alert(counter);
可以改进正则表达式以排除html标签,例如
答案 3 :(得分:0)
//Count words in a string or what appears as words :-)
function countWordsString(string){
var counter = 1;
// Change multiple spaces for one space
string=string.replace(/[\s]+/gim, ' ');
// Lets loop through the string and count the words
string.replace(/(\s+)/g, function (a) {
// For each word found increase the counter value by 1
counter++;
});
return counter;
}
var numberWords = countWordsString(string);
答案 4 :(得分:0)
这是我发现的最佳解决方案:
function wordCount(str) {
var m = str.match(/[^\s]+/g)
return m ? m.length : 0;
}
这会反转空格选择,这比\w+
更好,因为它只匹配拉丁字母和_(参见http://www.ecma-international.org/ecma-262/5.1/#sec-15.10.2.6)
如果你不小心使用空格匹配,你会计算空字符串,带有前导和尾随空格的字符串,以及所有空白字符串作为匹配项,而此解决方案正确处理' '
,' a\t\t!\r\n#$%() d '
等字符串(如果将'correct'定义为0和4)。