Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/450.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/88.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 正则表达式计算不包括html标记的单词数_Javascript_Html_Regex - Fatal编程技术网

Javascript 正则表达式计算不包括html标记的单词数

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,<

我有下面的场景

我有一个页面,我们有一个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>
但这包括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 ipsum

Lorem ipsum

Lorem 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>