如何将单个等号与正则表达式匹配?
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。您要查找的正则表达式应该是 (?<!=)=(?!=)
。这要求我们找到前面没有等号 (?<!=)
并且后面没有等号 (?!=)
.
的 =
使用前瞻和后视的建议答案可能会因空字符串而失败。相反,使用 (^|[^=])=($|[^=])
:
(^|[^=])
:字符串的开头或不是 =
字符
=
: =
字符
($|[^=])
: 字符串结尾或不是 =
字符
我有以下表达式:
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。您要查找的正则表达式应该是 (?<!=)=(?!=)
。这要求我们找到前面没有等号 (?<!=)
并且后面没有等号 (?!=)
.
=
使用前瞻和后视的建议答案可能会因空字符串而失败。相反,使用 (^|[^=])=($|[^=])
:
(^|[^=])
:字符串的开头或不是=
字符=
:=
字符($|[^=])
: 字符串结尾或不是=
字符