0

我得到了这个代码来计算来自 html 编辑器的字数。

(providing htmlData has already been set)
var rawWords = htmlData.replace(/<(?:.|\s)*?>/g, '')
                       .replace(/(\r\n|\n|\r)/gm,' ');
var filteredWords = rawWords.replace(/\[([^\]]+)\]/g,'')
                            .replace(/\s+/g, " ")
                            .replace(/^\s+|\s+$/g, "");

据我了解,第一行删除了 html,然后删除了任何返回。

下一行删除括号中的任何内容(这是在不影响字数的情况下添加注释),然后删除多余的空格

但是如果我输入这个:

Apple


Charlie

Tom

它给我的字数是 6,而不是 3。知道为什么吗?我不擅长正则表达式!!!!

非常感谢

4

3 回答 3

1

这些正则表达式丑陋且多余。我的建议是通过执行以下操作来获得清理后的 HTML:

var a=document.createElement('div')
a.innerHTML=htmlData;
textData=a.innerText

然后用一个简单的正则表达式循环并增加一个计数器:

var patt=new RegExp(/(^|\W)(\w+)($|\W)/g);
var counter=0;
var result=patt.exec(textData);
while(result!=null) {
  counter++;
  result=patt.exec(textData);
}

这是非常粗略的(并且做出了很多可能对您不起作用的假设)但是,A/您将与“单词”[您必须处理的定义]的数量相反,而 B/在获得您想要的内容之前,您不必替换和删除大量文本。

高温高压

于 2012-05-18T13:52:39.887 回答
1

试试这个,很简单,只需拆分空格/数字,并对数组进行计数。

window.onload = function() {

    // get string as text
    var text = document.body.innerText;

    // replace all non letters (so we don't count 1 as a word)
    text     = text.replace(/[^a-zA-Z\s]/g, '');

    // split on whitespace
    var words = text.split(/[\s]+/);

    // output -- 52
    console.log('numwords', words, words.length); // numwords 52
}

下面的完整示例:

<html>
<head>
<script type="text/javascript">// script</script>
</head>
<body>

a b c d e f g
1 1 1 1 1 1 1




the quick brown fox jumped over the lazy dog.
the quick brown fox jumped over the lazy dog.
the quick brown fox jumped over the lazy dog.<br><br><br><br><br>
the quick brown fox jumped over the lazy dog.
the quick brown fox jumped over the lazy dog.

</body>
</html>
于 2012-05-23T18:54:37.483 回答
0

用“”替换空格不适合这种方式。尝试:

 .replace(/[ ]{2,}/gi," ");  /*{2,}=repeated*/
 .replace(/(^\s*)|(\s*$)/gi,"");

代替:

.replace(/\s+/g, " ")
.replace(/^\s+|\s+$/g, "");

它应该可以正常工作。

于 2013-03-31T13:49:57.510 回答