正则表达式贪婪模式与非贪婪模式

所谓贪婪模式和非贪婪模式,都是在正则表达式进行匹配时的一种状态。

var str = 'hello world "tomorrow" will be "better" '
str.match(/".*"/g);

按照一贯的逻辑思维,匹配得到的结果应该会是tomorrowbetter。但是我们运行一下会发现,匹配的结果是"tomorrow" will be "better"

这个时候就是正则的贪婪模式在起作用。

所谓的贪婪模式就是在可以匹配多个结果时选取最大值的结果个数。

当匹配个数时,出现“+、*、{n,m}、{n,}”这些量词的时候,默认为最大数值的匹配个数。

上面的例子中,我们想让匹配的结果和我们预想的一样该如何操作呢?

取消贪婪模式时,只需要在量词后面加上“?”即可。

var str = 'hello world "tomorrow" will be "better" '
str.match(/".*?"/g);

这个时候我们就关闭了贪婪模式,正则引擎在匹配时会尽可能少的来匹配字符。上面代码的输出结果即为"tomorrow""better"

总结一下:在数量匹配时,正则引擎默认的规则为“贪婪模式”。在贪婪模式下,正则引擎会尽可能多的匹配字符,一直到匹配的结果为false时,回溯去寻找倒数第一个匹配位置,返回结果。“非贪婪模式”下,正则引擎会尽可能少的匹配字符,将第一个匹配结果为true的结果返回。取消贪婪模式的方法实在量词后面加上“?”即可。

你可能感兴趣的:(正则表达式贪婪模式与非贪婪模式)