正则表达式匹配正则表达式模式之外的所有内容

时间:2014-02-13 05:18:51

标签: javascript html regex

因此,我想使用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,因为我想保留标记信息并使用新信息将工作页面吐出来。

2 个答案:

答案 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);
相关问题