2017-02-18 76 views
2

我試圖捕捉包含兩個或多個大寫字符的字符串。字符串的結尾總是一個數字。有時候,字母和數字之間可能會有換行符,有時候不會。這是我到目前爲止:正則表達式匹配大寫字符,直到遇到一個數字

[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

+0

請給出一個或兩個輸入和期望輸出的具體例子。 – trincot

+1

您應該嘗試輸入「ABC失敗@!%1」(然後用相同的輸入嘗試我的答案),除非您的示例都是邊緣案例,並且允許其他任何字符在中間。 – Bohemian

回答

2

您可以在JavaScript中使用這個表達式:

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

ReGEx Demo

正則表達式描述:

  • ^ - 線路啓動
  • [A-Z]{2} - 第2場的大寫英文字母
  • [^]*? - 第0個或多個的任何字符(包括換行),懶惰
  • (?=\s*\d+$) - Lookahead斷言我們有0或更多的空格,後跟1或更多的數字i結束。

代碼演示:

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);

+0

如果你只想允許大寫字母和空格,然後使用:/^[A-Z] {2} [A-Z \ s] *?(?= \ s * \ d + $)/ gm'正則表達式。 – anubhava

1

試試這個:

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

live demo

還是這個多語言版本(YMMV在JavaScript):

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

live demo

這將處理來自所有語言的所有大寫字母(正如您嘗試包含ÅÖÄ字符所暗示的那樣)。

兩者都不匹配"ABC fail 1"

+0

OP寫的引擎基於Javascript,所以'\ p {Lu}'可能無法正常工作。 – anubhava

+0

@anub只是檢查,它不能在JS中工作,但JS允許'[^]':/ – Bohemian

相關問題