正则表达式将排除捕获组

bit*_*yan 7 regex

我正在写一个正则表达式,我需要捕获从"get"开始的多余的字符串.例如getContacts,getBuildings应该匹配正则表达式.但是,有时候文本可能等于getDetails或get**Details.我不希望正则表达式包含这些.

我可以提出一个包含匹配组"详细信息"的正则表达式,但我想要排除该捕获组,而不是包含它.

[Gg]et?\w+([Dd]etail)s
Run Code Online (Sandbox Code Playgroud)

我在正则表达式方面不是很强,但是我对我写的内容的理解是:

匹配"g"或"G"后跟"et"然后可选地任何单词字符,然后是匹配组,后跟"s".

如何排除包含"详细信息"一词的结果?

Qta*_*tax 9

这样的东西可能适合你:

\b[Gg]et(?!\w*[Dd]etails)\w+s\b
Run Code Online (Sandbox Code Playgroud)

  • 负向前瞻 `(?!...)` 确保 Details 不是该匹配的一部分,`\b` 用于将匹配锚定在单词的开头/结尾,否则 `GetBars` 将在此匹配刺痛`setGetBarsX`。 (3认同)

Gus*_*Gus 6

我相信您正在寻找零宽度负前瞻...

http://www.regular-expressions.info/lookaround.html

[Gg]et(?![Dd]etail)\w+s
Run Code Online (Sandbox Code Playgroud)

假设您想排除“获取详细信息”和“获取信息”但接受“获取页面”和“获取我的详细信息”(注意原始正则表达式中的尾随 s 已经排除了“获取信息”)