Javascript 正则表达式计算不包括html标记的单词数
我有下面的场景 我有一个页面,我们有一个tinymce编辑器,在那里我们可以粘贴文本。有一个选项可以限制要粘贴到编辑器中的字符或单词 我有一篇这样的文章Javascript 正则表达式计算不包括html标记的单词数,javascript,html,regex,Javascript,Html,Regex,我有下面的场景 我有一个页面,我们有一个tinymce编辑器,在那里我们可以粘贴文本。有一个选项可以限制要粘贴到编辑器中的字符或单词 我有一篇这样的文章 <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod<br />tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,<
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod<br />tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,<br />quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo<br />consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse<br />cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non<br />proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod<br />tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,<br />quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo<br />consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse<br />cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non<br />proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod<br />tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,<br />quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo<br />consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse<br />cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non<br />proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod<br />tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,<br />quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo<br />consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse<br />cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non<br />proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod<br />tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,<br />quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo<br />consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse<br />cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non<br />proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod<br />tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,<br />quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo<br />consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse<br />cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non<br />proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p><p>
但这包括HTML标记中的字符,如图所示
我也试过了
(\s+|>)\w+
这越来越近了,但也包括了作为html实体一部分的>符号,如图所示
请记住,我无法替换尖括号内的文本,因为此文本编辑器用于提交科学和医学论文,因此在某些情况下,这些符号<和>用于表示符号。我将其简化为:
var text = "<p>Lorem ipsum</p><p>Lorem ipsum</p><p sdf>Lorem ipsum</p>";
var words = text.replace(/(<([^\s>]+)>)/ig, " ").trim().split(/\s+/).length;
console.log(words); // output: 6
var text=“Lorem ipsumLorem ipsumLorem ipsum
”;
var words=text.replace(/(]+)>)/ig,“”.trim().split(/\s+/).length;
console.log(单词);//产出:6
- 首先使用正则表达式替换所有html标记
- 使用
trim
- 然后使用正则表达式拆分所有单词(这样空格就不会算作单词)
/(]+)>)/ig
:
- 像
,
等标签被替换,而 - 标记(包括空格)不会被替换
/
字符
正则表达式:/[^/]([\w\u2019\'-]+)(?!\s*\/>)/gmi
福福福
咕咕咕咕
var-allText;
var divElm=document.getElementById('test');
for(divElm.childNodes中的文本){
allText+=divElm.childNodes[text].textContent;
}
警报(所有文本);
TinyMCE的插件实际上已经存在
这里有一个稍微修改过的版本,它应该适合你的目的
toPlainText=函数(字符串){
var tx=字符串;
var-tc=0;
中频(tx){
tx=tx.replace(/\.\./g',);//将椭圆转换为空格
tx=tx.replace(//g')。replace(//160;/gi');//删除html标记和空格字符
//处理html实体
tx=tx.替换(/(\w+)(?[a-z0-9]+)+(\w+)/i,“$1$3”)。替换(/&.+?;/g”);
tx=tx.replace(/[0-9.,;:!?%\$?\x27\x22+=\\\/\-]*/g',;//删除数字和标点符号
var wordArray=tx.match(/[\w\u2019\x27\-\u00C0-\u1ff]+/g);
if(字数组){
tc=wordArray.join(“”);
}
}
var div=document.createElement('div');
div.innerHTML=tc;
返回div.textContent;
}
document.write(toPlainText("知识本身是一种美德,是一种美德,是一种美德,是一种美德,是一种美德,是一种美德,是一种美德,是一种美德,是一种美德,是一种美德,是一种美德,是一种美德不属于“不属于”的特殊情况)
难道你不能只提取带有textContent
或innerText
的文本,并计算一下吗?著名的“不要在HTML上使用正则表达式,因为HTML不是一种常规语言”帖子:如果HTML不是递归嵌套的,特别是如果它没有古怪的属性或无效的HTML,那么正则表达式就可以了。事实上,如果输入没有ave unescaped你试过Gaby的建议吗?正如OP所说,请记住我不能替换尖括号内的文本,因为这个文本编辑器用于提交科学和医学论文,所以在某些情况下,这些符号<和>用于表示。@noob很好!我更新了一点我的答案。你认为呢f it?我不会尝试修补替换,因为OP严格提到,在某些情况下,这些符号<和>用于表示法。无论如何,你认为我的解决方案如何?看起来确实很有趣!它适用于包含一个字符的标记。较长的标记会增加字数。另一个想法是创建一个只包含r的正则表达式emoves/排除html标记-这可能是最准确的?@sjkm:当然。但这是这个问题的要求吗?
var text = "<p>Lorem ipsum</p><p>Lorem ipsum</p><p sdf>Lorem ipsum</p>";
var words = text.replace(/(<([^\s>]+)>)/ig, " ").trim().split(/\s+/).length;
console.log(words); // output: 6
<div id="test">
<p>foofoofoofoofoo</p>
<h1>googoogoogoogoogoo</h1>
<script>
var allText;
var divElm = document.getElementById('test');
for (text in divElm.childNodes) {
allText += divElm.childNodes[text].textContent;
}
alert(allText);
</script>