正则表达式计算不包括 html 标记的单词
RegEx count words excluding html tags
我有以下情况。
我有一个页面,我们有一个 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,<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>
根据SublimeText,它有342个单词长。
如果我删除html标签,Sublime说它是368个单词长,MS Word是379个单词。
我正在尝试找到一个正则表达式,它可以查找除 html 标签之外的所有单词,以便在我们的系统上进行适当的字数统计。
到目前为止我已经尝试过
/['w'u2019''-]+/gim
但这包括 HTML 标记中的字符,如下所示
正则表达式101
我也尝试过
('s+|>)'w+
这越来越近了,但这还包括作为 html 实体一部分的>符号,如下所示
正则表达式101
请记住,我不能替换尖括号内的文本,因为此文本编辑器用于科学和医学论文提交,因此在某些情况下,这些符号<和>用于符号。和>
TinyMCE的插件实际上存在,它计算给定文本的单词。
这是tinymce/js/tinymce/plugins/wordcount/的稍微改编的版本 这应该符合您的目的。
toPlainText = function(string) {
var tx = string;
var tc = 0;
if (tx) {
tx = tx.replace(/'.'.'./g, ' '); // convert ellipses to spaces
tx = tx.replace(/<.[^<>]*?>/g, ' ').replace(/ | /gi, ' '); // remove html tags and space chars
// deal with html entities
tx = tx.replace(/('w+)(&#?[a-z0-9]+;)+('w+)/i, "$1$3").replace(/&.+?;/g, ' ');
tx = tx.replace( /[0-9.(),;:!?%#$?'x27'x22_+='''/'-]*/g, ''); // remove numbers and punctuation
var wordArray = tx.match(/['w'u2019'x27'-'u00C0-'u1FFF]+/g);
if (wordArray) {
tc = wordArray.join(" ");
}
}
var div = document.createElement('div');
div.innerHTML = tc;
return div.textContent;
}
document.write(toPlainText("<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 />"));
计算单词。
我改进了您的正则表达式以检查单词周围的<>/
字符。
正则表达式:/[^<>/](['w'u2019''-]+)(?!'s*'/>)/gmi
正则表达式 101 演示
我会通过将其分解为:
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
- 首先使用带有正则表达式的
replace
删除所有 HTML 标记 - 使用
trim
- 然后使用正则表达式
split
所有单词(这样空格就不算作单词)
最后你有字数。
请注意,我使用以下正则表达式来替换/(<([^'s>]+)>)/ig
:
- 像
<p>
、</p>
等标签被替换,而- 不会替换类似(包括空格)之类的标记。
这应该给你一个很好的近似值。
<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>
相关文章:
- 如何查找一个单词在动态创建的html表行中出现的次数
- 如何忽略单词like“”中的未使用空格;测试-文本”;同时构建html标签
- 使用 JavaScript split 来包含单词,标点符号与 span 但忽略 HTML
- 使用Javascript双击HTML中的空格时,选择上一个和下一个单词
- javascript 不将超过 1 个单词的字符串传递给 HTML
- 试图用随机选择的单词填充html中的ul.JS
- 使用 JavaScript 正则表达式获取所有没有 HTML 标签的单词
- 在 HTML/JS/JQuery 中屏蔽单词
- JavaScript-从脚本中的单词列表创建一个html表或网格
- 正则表达式捕获html标记中的单词
- 正则表达式以匹配 HTML 范围标记中包含的多个单词
- HTML “标题”属性显示单词“未定义” - 例如.“主页未定义”
- Javascript删除某个单词所在的html行
- 如何通过css或javascript甚至使用jquery在html中扩展缩写单词
- 正则表达式计算不包括 html 标记的单词
- 使用 Javascript 的 replace() 方法用 html 包装单词
- JQuery:如何在html元素中列出单词
- HTML 浏览器的“文本”选择:选择整个单词(如在 iBooks 中)
- 在 html 中拖放单词
- 给点击的单词加下划线,以及检测加下划线的单词(HTML、JS或CSS)