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