正则表达式:不直接在目标之前的负面回顾
Regex: negative lookbehind not directly before target
我正在调试一些 JavaScript 代码,我需要识别包含“=”且后跟比较运算符(例如“==”、“>”、“<”、“!=”)的行.但是,我想忽略前面有 for 循环开头的行。所以我想识别这样的行:
x = (y > z) * 2;
但忽略像这样的行:
for (var i = 1; i<5; i++) {
我认为这需要消极的回顾。但是我将放在否定后视中的文本“for”并没有紧接在我要匹配的文本之前。
我在 Notepad++ 中试过这个正则表达式:
(?<!for .*) = .*(==|>|<|!=)
但它被报告为“无效”,因为后视中的量词使其成为非固定宽度。
另一方面,此正则表达式有效但对我没有帮助,因为“for”没有紧接在我要匹配的文本之前:
(?<!for ) = .*(==|>|<|!=)
如有任何建议,我们将不胜感激。
尝试否定前瞻:
^(?!.*for ).* = .*(==|>|<|!=)
如果您不想匹配“for”部分,则放入另一个捕获组,然后访问/替换该组
^(?!.*for ).* (= .*(?:==|>|<|!=))
更健壮一点(容忍缺少空格,<=
+ >=
,但令人厌恶):
^(?!.*?\bfor\b).*?[^\n!<>=](=[^\n=].*?(?:[<>]|[!=<>]=))
编辑:
我必须插入 ^
,以确保匹配从行首开始。根据您的正则表达式风格,^
可能完全匹配一行的开头或文本的开头。如果是后者,则必须使用 (?<=^|\n)
之类的正向后视,而不是 ^
(适用于 Notepad++)。
我正在调试一些 JavaScript 代码,我需要识别包含“=”且后跟比较运算符(例如“==”、“>”、“<”、“!=”)的行.但是,我想忽略前面有 for 循环开头的行。所以我想识别这样的行:
x = (y > z) * 2;
但忽略像这样的行:
for (var i = 1; i<5; i++) {
我认为这需要消极的回顾。但是我将放在否定后视中的文本“for”并没有紧接在我要匹配的文本之前。
我在 Notepad++ 中试过这个正则表达式:
(?<!for .*) = .*(==|>|<|!=)
但它被报告为“无效”,因为后视中的量词使其成为非固定宽度。
另一方面,此正则表达式有效但对我没有帮助,因为“for”没有紧接在我要匹配的文本之前:
(?<!for ) = .*(==|>|<|!=)
如有任何建议,我们将不胜感激。
尝试否定前瞻:
^(?!.*for ).* = .*(==|>|<|!=)
如果您不想匹配“for”部分,则放入另一个捕获组,然后访问/替换该组
^(?!.*for ).* (= .*(?:==|>|<|!=))
更健壮一点(容忍缺少空格,<=
+ >=
,但令人厌恶):
^(?!.*?\bfor\b).*?[^\n!<>=](=[^\n=].*?(?:[<>]|[!=<>]=))
编辑:
我必须插入 ^
,以确保匹配从行首开始。根据您的正则表达式风格,^
可能完全匹配一行的开头或文本的开头。如果是后者,则必须使用 (?<=^|\n)
之类的正向后视,而不是 ^
(适用于 Notepad++)。