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

Javascript - regular expression - how to skip search for a string that exists within a pattern

本文关键字:存在 搜索 字符串 正则表达式 何跳过 Javascript 模式      更新时间:2023-09-26

在下面的代码中,使用正则表达式,我们如何用":"

搜索并替换在<>中没有找到的"="
'ABC=<ATTR1 TEST="11">VALUE1</ATTR1>'

这并不是regex设计的真正目的,但是…

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

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

如果你正在寻找一个跨浏览器的解决方案(lookbehind是一个不去)

  1. 我将用正则表达式将<>之间的所有文本存储到数组
  2. Do your equal/= replace
  3. 最后我将恢复<>
  4. 之间的文本

或者您可以在javascript中split().reverse()字符串,然后使用向前看来绕过没有向后看的支持。本文还提供了一些替代的解决方案,以支持背后。

不应该使用regex解析HTML,而应该使用解析器。

如果您只有这些类型的标签,并且文本不包含未转义的<>:

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/

我写这个只是为了好玩,我没有想到所有的情况,只是一个概念的证明。