我有以下表达式:
if(x == a+b) b=a+2; else x = 1;
我需要匹配一个等号=。不是==,而不是====等等。并且它应匹配标志周围没有空格,只是等号。 我有一个怪物般的注册。表达式匹配上面代码中的所有内容,我需要的只是单个等号。 这是我的expr:
/\bif\b|\belse\b|\(|\)|\+|\-|\*|\\|\>|\<|\<=|\>=|(?<![!=])[!=]=(?!=)|([a-zA-Z][a-zA-z0-9_]*)|(\d+\.?\d*)/g
虽然它可能不是最佳变体(我确定它不是:)),我需要通过管道添加“等于匹配”|进入我的表达。
看起来很奇怪,但我没有找到通过stackoverflow问题搜索的解决方案...
答案 0 :(得分:7)
您需要使用look-ahead and look-behind zero length assertion。您正在寻找的正则表达式应为(?<!=)=(?!=)
。这要求我们发现=
前面没有等号(?<!=)
,而后面没有等号(?!=)
。
答案 1 :(得分:2)
这是我能提出的最简单的方法:
(?<!=)=(?!=)
答案 2 :(得分:1)
前瞻和后视的建议答案可能会因空字符串而失败。相反,请使用(^|[^=])=($|[^=])
:
(^|[^=])
:字符串的开头是否为=
字符=
:=
字符($|[^=])
:字符串的结尾或=
字符