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

时间:2017-02-18 13:59:40

标签: regex

我试图捕获包含两个或更多大写字符的字符串。字符串的结尾始终是一个数字。有时字母和数字之间可能会有换行符,有时不会。这就是我到目前为止所拥有的:

[A-Z-ÅÖÄ\s]+[^\d]

引擎基于javascript。

示例:

输入:

ABC ABCDE XYZ
1
EFG XYZ ABC 2
not me
EFG ABC
3

输出:     match1:ABC ABCDE XYZ     match2:EFG XYZ ABC     match3:EFG ABC

2 个答案:

答案 0 :(得分:2)

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

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

ReGEx Demo

RegEx说明:

  • ^ - 直线开始
  • [A-Z]{2} - 匹配2个大写英文字母
  • [^]*? - 匹配0个或更多字符(包括换行符),懒惰
  • (?=\s*\d+$) - 断言断言我们有0个或更多空格,最后是1个或多个数字。

代码演示:

var str = `ABC ABCDE XYZ
1
EFG XYZ ABC 2
not me
EFG ABC
3`;

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

var m = str.match(re);

console.log(m);

答案 1 :(得分:1)

试试这个:

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

请参阅live demo

或者这个多语言版本(JavaScript中的YMMV):

^\p{Lu}{2}( *\p{Lu})*(?=\s\d$)

请参阅live demo

这会处理所有语言的所有大写字母(根据您的尝试建议包含ÅÖÄ个字符)。

两者都不匹配"ABC fail 1"