2016-08-01 51 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