正则表达式否定非连续模式

Regex Negate non-contiguous Pattern

我想匹配单词 fleece NOT 后跟(立即或进一步)单词

输入数据:

Mary had a little lamb, its fleece was white as snow balls

以下正则表达式不起作用,因为它们都匹配,也不应该匹配。我确定我过去曾实现过此功能,但找不到位置。

/(fleece).*(?!snow)/
/(fleece)[\w ]+(?!snow)/

有关信息,此正则表达式将成为更大正则表达式的一部分,并且将成为一个交替部分,因此我不能简单地否定整个正则表达式 - 例如

/something(?!somethingelse)|fleece.*(?!snow)/

你快到了。将 .* 放在负前瞻中。下面的正则表达式将捕获字符串 fleece 只有当它后面没有跟随 .*? 任何字符零次或多次以及字符串 snow.

(fleece)(?!.*?snow)

必要时使用单词边界 \b

\b(fleece)\b(?!.*?\bsnow\b)

DEMO