捕获组中的正则表达式负先行

regex negative lookahead in capture group

我试图捕获一串大写字符,但如果大写字母后面有小写字母,我想忽略

例如 对于字符串 ABC ABC ABC ABc 它应该捕获 ABC ABC ABC 只是因为在最后一个 AB

之后有一个小写 'c'

我尝试了 ([A-Z ]+),它捕获了 ABC ABC ABC AB

如何在这种情况下添加否定前瞻?

https://regex101.com/r/j8Arzu/12

尝试将 [A-Z]\b 放在末尾,以确保匹配在单词右侧的单词边界处结束,而不匹配不必要的 space。请注意,这里不需要捕获组,您可以完全忽略它。

[A-Z ]+[A-Z]\b

https://regex101.com/r/j8Arzu/13

如果大写字母子字符串可能以 space 开头,则在字符串的开头使用相同的技术 - 以 \b[A-Z]:

开头
\b[A-Z][A-Z ]*[A-Z]\b

如果你另外可能只有一个字符匹配,那么将第二个和第三个字符集[A-Z ]*[A-Z]放入可选组:

\b[A-Z](?:[A-Z ]*[A-Z])?\b

使用单词边界 \b 来避免匹配部分单词,并使用前瞻和负后视来避免开头和结尾的空格。

(?! )\b[A-Z ]+\b(?<! )

https://regex101.com/r/Gf37Zk/1

要仅捕获连续的大写字母,您可以试试这个正则表达式:/\b[A-Z]+\b/g

演示:https://regex101.com/r/W0VE7U/1