2012-05-31 329 views
12

我在JavaScript中有一個很長的字符串像正則表達式字符串匹配?

var string = 'abc234832748374asdf7943278934haskhjd';

我想匹配像

abc234832748374 - 那就是 - 我試圖像

string.match(\abc[^abc]|\def[^def]|)但是,這並不讓我兩個字符串因爲我需要數字嗎?

基本上我需要abc + 8個字符和def之後的8-11個字符?我怎樣才能做到這一點 ?

回答

25

如果你想要的文字串,然後8-11位abcdef,你需要的東西,如:

(abc|def)[0-9]{8,11} 

你可以在這裏進行測試:http://www.regular-expressions.info/javascriptexample.html

注意的是,如果你不想匹配超過11雙控釋片,你需要在字符串的結尾錨(或[^0-9])。如果它只是8個或更多,你可以用{8}取代{8,11}

1

可以爲後面8位數字的字符串匹配abcabc[0-9]{8}

如果前三個字符是任意的,之後8-11個數字,嘗試[a-z]{3}[0-9]{8,11}

1

使用下面的正則表達式來獲得精確匹配,

string.match(/(abc|def)\d{8,11}/g); 

相剋

"g"全球

"i"爲IGNORECASE

"m"用於多

9

要結束闡述在已經發布的答案,你需要一個全球性的比賽,具體如下:

var matches = string.match(/(abc|def)\d{8,11}/g); 

這將匹配字符串的所有子集,其中:

  • 開始用「ABC」或「DEF」。這是 「(ABC | DEF)」 部分
  • 然後其次是8-11的數字。這是「\ d {8,11}」部分。 \ d匹配數字。

「g」標誌(全局)爲您提供所有匹配的列表,而不僅僅是第一個匹配。

在你的問題,你問8-11 字符,而不是數字。如果它們是數字或其他字符無關緊要,則可以使用「。」。而不是「\ d」。

我還注意到,您的每個示例匹配在「abc」或「def」之後都有11個以上的字符。如果任意數量的數字會做,那麼下面的正則表達式的可能更適合:

  • 任意數量的數字 - var matches = string.match(/(abc|def)\d*/g);
  • 至少一個數字 - var matches = string.match(/(abc|def)\d+/g);
  • 至少8位數字 - var matches = string.match(/(abc|def)\d{8,}/g);
+1

+1需要時間寫一個解釋! –