正则表达式负前瞻不匹配最后 space

Regex negative lookahead not matching last space

我有文字:

test: [ABCD]
test: foobar
test:      [ABCD]

我写了这个正则表达式:

test:\s+(?!\[ABCD)

所以基本上我想找到 test: 后面没有跟 [ABCD 并且两者之间可以有任意数量的白色 space 的任何事件。

因此,对于前两个示例,它按预期工作,但我对第三个示例有疑问:看起来是因为这部分:(?!\[ABCD) \s+ 与最后 [=28] 不匹配=] 如果有多个。为什么会这样,如何解决?我想第三个例子 bahave 就像第一个一样。来自 regex101 的屏幕截图说明了这个问题:

你需要在与锚点的比赛前进行前瞻:

/^(?!test:\s+\[ABCD\]).*/

Demo

如果符合标准,您有一个很好的答案可以匹配整行,但基于此:

I want to find any occurence where "test:" is NOT followed by "[ABCD" and there can be any amount of whitespace between the two.

如果您只想匹配“test:”部分,您可以将空白字符移动到负数 look-ahead 中。

test:(?!\s+\[ABCD)

使用您的示例短语的 regex101 屏幕截图:

您获得了最后一个匹配项,因为 \s+ 可以回溯一步以确保最后一个断言为真。

没有列出语言,但是 possessive quantifiers 支持,您也可以使用

test:\s++(?!\[ABCD)

看到一个regex demo