Javascript - 正则表达式 - 如何跳过搜索模式中存在的字符串

时间:2011-07-25 05:25:59

标签: javascript regex

在下面的代码中,使用正则表达式,我们如何搜索和替换" ="在<>中找不到用":"

'ABC=<ATTR1 TEST="11">VALUE1</ATTR1>'

3 个答案:

答案 0 :(得分:0)

这不是真正的正则表达式的设计,但是......

(?<!<[^>]*)=(?![^<]*>)

与正则表达式差不多(如果你的味道支持负向前瞻和后瞻)。但是,我不相信Javascript会这样做,这意味着您应该使用比正则表达式引擎更具体的解析器。

答案 1 :(得分:0)

如果您正在寻找跨浏览器解决方案(lookbehind是不行)

  1. 我只会将<>与正则表达式之间的所有文本存储到数组
  2. 做你的平等/ =替换
  3. 最后,我会在<>
  4. 之间恢复文字

    或者你可以在{javascript中split().reverse()字符串,然后使用lookahead绕过没有lookbehind支持。 This文章还提供了一些替代解决方案,以支持支持。

答案 2 :(得分:0)

不应使用正则表达式解析HTML ,而应使用解析器。请参阅mu的评论。

如果您只有这些类型的标记,并且该文字不包含未转义的<>

var str = 'ABC=<ATTR1 TEST="11">VALUE1</ATTR1>'+"\n"
    + 'foo = bar <foo x="5 > 3 = true" y=\'fo> = \'> === </foo=>';

str = str.replace(/(?:=|(<(?:[^"'<>]+|"[^"]*"|'[^']*')*>))/g, function(m,tag){
    return tag ? tag : ':';
});

结果:

ABC:<ATTR1 TEST="11">VALUE1</ATTR1>
foo : bar <foo x="5 > 3 = true" y='fo> = '> ::: </foo=>

http://jsfiddle.net/Vz6BK/

的示例

我写这篇文章只是为了好玩,我没有想到所有案例,只是一个概念证明。