正则表达式:理解非贪婪的重复

时间:2015-10-28 14:04:07

标签: javascript regex

为什么正则表达式模式/y+?z/与整个字符串yyyz匹配?

我理解模式/y+z/ 贪婪,因此会匹配一个或多个y字符,后跟一个z字符。要使此表达式非贪婪(仅匹配y的第一个实例),我可以在?字符后面立即引入+字符。例如/y+?z/。现在,我希望这个模式匹配字符串yz。但事实并非如此。而是整个字符串yyyz匹配。

1 个答案:

答案 0 :(得分:4)

正则表达式匹配始终从最早的位置开始,这是第一个y。由于匹配正则表达式的z部分的唯一方法是匹配所有插入的y,因此正则表达式将匹配整个字符串。

懒惰评估并不意味着“匹配尽可能少”,而是“尽可能少地匹配从当前位置完成匹配”。