Regex 正则表达式匹配大写字符,直到遇到数字

Regex 正则表达式匹配大写字符,直到遇到数字,regex,Regex,我正在尝试捕获包含两个或更多大写字符的字符串。字符串的结尾总是一个数字。有时字母和数字之间可能会有换行符,有时则不会。以下是我目前掌握的情况: [A-Z-ÅÖÄ\s]+[^\d] 该引擎基于javascript 例如: 输入: ABC ABCDE XYZ 1 EFG XYZ ABC 2 not me EFG ABC 3 输出: 匹配1:ABC ABCDE XYZ 匹配2:EFG XYZ ABC match3:EFG ABC您可以在Javascript中使用此正则表达式: /^[A-Z]{2}

我正在尝试捕获包含两个或更多大写字符的字符串。字符串的结尾总是一个数字。有时字母和数字之间可能会有换行符,有时则不会。以下是我目前掌握的情况:

[A-Z-ÅÖÄ\s]+[^\d]
该引擎基于javascript

例如:

输入:

ABC ABCDE XYZ
1
EFG XYZ ABC 2
not me
EFG ABC
3
输出: 匹配1:ABC ABCDE XYZ 匹配2:EFG XYZ ABC
match3:EFG ABC

您可以在Javascript中使用此正则表达式:

/^[A-Z]{2}[^]*?(?=\s*\d+$)/gm

正则表达式说明:

  • ^
    -行开始
  • [A-Z]{2}
    -匹配2个大写英文字母
  • [^]*?
    -匹配0个或多个任意字符(包括换行符),或
  • (?=\s*\d+$)
    -向前看,它断言我们有0个或更多的空格,后跟1个或更多的数字
代码演示:

var str=`ABC ABCDE XYZ
1.
EFG XYZ ABC 2
不是我
EFG ABC
3`;
var re=/^[A-Z]{2}[^]*?(?=\s*\d+$)/gm;
var m=str.match(re);
控制台日志(m)请尝试以下操作:

^[A-Z]{2}( *[A-Z])*(?=\s\d$)

或此多语言版本(JavaScript中的YMMV):

这将处理所有语言中的所有大写字母(如您尝试使用的
ÖÄ
字符所示)


两者都不匹配,请给出一个或两个输入和预期输出的具体示例。您可能应该使用输入“ABC失败!%1”
(然后使用相同的输入尝试我的答案),除非你的例子是所有的边缘情况和任何其他字符都允许在中间。OP编写的引擎是基于JavaScript的,所以代码> \p{卢} /代码>可能不起作用。@ ANUB只是检查,它在JS中不起作用,而JS允许<代码> [^ ] /代码>:/如果你只想允许大写字母加空白,则使用:<代码> /^ [AZ] { 2 }[AZ-S] *?(?=\s*\d+$)/gmregex。
^\p{Lu}{2}( *\p{Lu})*(?=\s\d$)