惰性匹配

课后整理 2020-12-10

重复类量词都具有贪婪性,在条件允许的前提下,会匹配尽可能多的字符。

【示例1】越是排在左侧的重复类量词匹配优先级越高。下面示例显示当多个重复类量词同时满足条件时,会在保证右侧重复类量词最低匹配次数基础上,最左侧的重复类量词将尽可能占有所有字符。

var s  ="<html><head><title></title></head><body></body></html>";
var r = /(<.*>)(<.*>)/
var a = s.match(r);

//左侧子表达式匹配"<html><head><title></title></head><body></body>"

console.log(a[1]);
console.log(a[2]);                                     //右侧子表达式匹配"</html>"

与贪婪匹配相反,惰性匹配将遵循另一种算法:在满足条件的前提下,尽可能少的匹配字符。定义惰性匹配的方法:在重复类量词后面添加问号(?)限制词。贪婪匹配体现了最大化匹配原则,惰性匹配则体现最小化匹配原则。

【示例2】下面示例演示了如何定义惰性匹配模式。

var s  ="<html><head><title></title></head><body></body></html>";
var r = /<.*?>/
var a = s.match(r);                                     //返回单个元素数组["<html>"]

在上面示例中,对于正则表达式/<.*?>/来说,它可以返回匹配字符串"<>",但是为了能够确保匹配条件成立,在执行中还是匹配了带有4个字符的字符串"html"。惰性取值不能够以违反模式限定的条件而返回,除非没有找到符合条件的字符串,否则必须满足它。

【提示】

针对6种重复类的惰性匹配简单描述如下。