正面和负面前瞻和量词

Positive & negative lookaheads and quantifiers

有人可以向我解释为什么该模式(负前瞻)

/aa.+(?!cc)/g

匹配所有 4 行

aabbcc
aab
aabbcc
aab

虽然我原以为只有以下 2 行会匹配:

aabbcc
aabb
aabbcc
aabb

模式(正面前瞻):

/aa.+(?=cc)/g

只匹配 2 行:

aabbcc
aab
aabbcc
aab

如我所料?

我正在使用 PCRE 风格的 RegEx 引擎。

因为 .+ 在这个模式中 aa.+(?!cc) 匹配所有字符直到结尾。由于在最后一个字符串之后不存在字符串 cc,因此此正则表达式匹配上述所有字符串。

aa(?!.*cc).+

像上面那样修改你的正则表达式以匹配第二行和第四行。 (?!.*cc) negative lookahead 断言不会有字符串 cc 出现在将使用 .+ 模式匹配的后续字符串中。

DEMO

正确的负前瞻正则表达式是:

/^aa((?!cc).)+$/gm

RegEx Demo

这将匹配 aa 之后的任何内容,只要行尾没有 cc