否定正则表达式中的交替

Jos*_*hua 5 regex actionscript-3 regex-negation

我可以在正则表达式中使用“Alternation”来匹配任何出现的“cat”或“dog”:

(cat|dog)
Run Code Online (Sandbox Code Playgroud)

是否可以否定这种交替,并匹配任何不是“猫”或“狗”的东西?

如果是这样,怎么办?

例如:

假设我正在尝试以近似的方式匹配英语中的 END OF SENTENCE。

以机智:

(\.)(\s+[A-Z][^.]|\s*?$)
Run Code Online (Sandbox Code Playgroud)

与以下段落:

敏捷的棕色狐狸跳过了懒狗。曾几何时,桑切斯博士、帕森斯先生和梅森州长去了商店。你好世界。

我错误地在 Dr.、Mr. 和 Gov. 中找到了“句子结尾”。

(我正在使用http://regexpal.com/进行测试,以防您想看看我在上面的示例中看到的内容)

既然这是不正确的,我想说的是:

!(Dr\.|Mr\.|Gov\.)(\.)(\s+[A-Z][^.]|\s*?$)
Run Code Online (Sandbox Code Playgroud)

当然,这是行不通的,这就是我寻求帮助的原因。

我也尝试过 !/(Dr.|Mr.|Gov.)/, 和 !~ 但没有任何帮助。

如何避免匹配“Dr.”、“Mr.” 和“政府”等?

提前致谢。

Jer*_*man 2

这不可能。您通常会使用否定lookbehind 来执行此操作(?<!\xe2\x80\xa6),但JavaScript 的正则表达式风格不支持此操作。相反,您必须在事后过滤匹配项以丢弃您不想要的匹配项。

\n