因此,我想使用javascript替换文本正文中HTML标记之外的所有单词。请查看以下说明。
我想转换一下:
<tag with-attr="something"></tag><tag>Text to match</tag><tag>Text to Match</tag>
......对此:
<tag with-attr="something"></tag><tag>Manipulated Text</tag><tag>Manipulated Text</tag>
现在,我有一个正则表达式,可以匹配所有标签及其包含的文本:
\<[^>]*\>
但我不确定如何表达invert
,可以这么说。
修改
另外,我希望使用replace
/ match
函数,而不是split
,因为我想保留标记信息并使用新信息将工作页面吐出来。
答案 0 :(得分:1)
使用包含paren-split的split()RegExp和其他数组方法使“流处理”变得相当简单:
'<tag with-attr="something"></tag><tag>Text to match</tag>Text to Match<tag>'
.split(/(<[^>]+>)/).map(function(x,i){
if(!(i%2) && x){ x= escape(x); }
return x;
}).join("");
示例输出:
"<tag with-attr="something"></tag><tag>Text%20to%20match</tag>Text%20to%20Match<tag>"
escape()只是为了表明textContent确实被改变了...... 我只保证接近你的例子的输入。深度嵌套或无效的HTML可能会欺骗任何RegExp,但我相信其他人会提起这个......
答案 1 :(得分:0)
像这样的东西
/>([^<>]*\w)</
演示:http://rubular.com/r/2QPLjOeMAu
现在你只需要替换这样的内容:
var str = '<tag with-attr="something"></tag><tag>Text to match</tag><tag>Text to Match</tag>';
var res = str.replace(/>([^<>]*\w)</g, '>Manipulated text<');
console.log(res);