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]);
以下代碼僅匹配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]);
您可以使用一個懶惰+?
量詞:
/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組
謝謝。什麼是使它更詳細的優勢? – AppTest
更好的回溯控制,你知道你正在匹配什麼樣的模式,並且執行速度更快。如果模式未知,您可能仍然會使用懶惰量詞與'.' –
感謝您的詳細解答 – AppTest