2016-08-01 20 views
2

以下代碼僅匹配MN。我如何得到它匹配KDMN如何讓我的極限匹配貪婪?

var str = ' New York Stock Exchange (NYSE) under the symbol "KDMN."'; 
var patt = new RegExp("symbol.+([A-Z]{2,5})"); 
var res = patt.exec(str); 
console.log(res[1]); 

回答

2

您可以使用一個懶惰+?量詞:

/symbol.+?([A-Z]{2,5})/ 
     ^

regex demo。如果你保持貪婪.+,它將盡可能匹配更多的字符,並且只留下下一個子模式的最少2個字符。

或者說,我寧願讓這更有點冗長:

/symbol\s+"([A-Z]{2,5})/ 

another regex demo。該symbol文字字符串匹配symbol\s+將匹配1個或多個空格,"將匹配一個雙引號,和([A-Z]{2,5})將捕獲2至5大寫ASCII字母爲1組

+0

謝謝。什麼是使它更詳細的優勢? – AppTest

+1

更好的回溯控制,你知道你正在匹配什麼樣的模式,並且執行速度更快。如果模式未知,您可能仍然會使用懶惰量詞與'.' –

+1

感謝您的詳細解答 – AppTest