如何将单个等号与正则表达式匹配?

How do I match a single equals sign with regular expressions?

我有以下表达式:

if(x == a+b) b=a+2; else x = 1;

我需要匹配一个等号=。不是==,不是====等等。它应该在符号周围没有空格的情况下匹配,只是等号。 我有一个相当怪物般的注册。匹配上面代码中所有内容的表达式,除了单个等号之外我需要的所有内容。 这是我的表达式:

 /\bif\b|\belse\b|\(|\)|\+|\-|\*|\|\>|\<|\<=|\>=|(?<![!=])[!=]=(?!=)|([a-zA-Z][a-zA-z0-9_]*)|(\d+\.?\d*)/g

虽然它可能不是最佳变体(我确定不是:)),但我需要通过管道添加 "equals match" |进入我的表情。

看起来可能很奇怪,但我没有找到通过 Whosebug 问题搜索的解决方案...

这是我能想到的最简单的方法:

(?<!=)=(?!=)

您需要使用 look-ahead and look-behind zero length assertion。您要查找的正则表达式应该是 (?<!=)=(?!=)。这要求我们找到前面没有等号 (?<!=) 并且后面没有等号 (?!=).

=

使用前瞻和后视的建议答案可能会因空字符串而失败。相反,使用 (^|[^=])=($|[^=]):

  • (^|[^=]):字符串的开头或不是 = 字符
  • =: = 字符
  • ($|[^=]): 字符串结尾或不是 = 字符