正则表达式:不直接在目标之前的负面回顾

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++)。