Appearance
惰性匹配
本节目标:理解“惰性匹配”的核心思路,并能把它用于实际开发或面试表达。
在满足条件的前提下,尽可能少的匹配字符。定义惰性匹配的方法:在重复类量词后面添加问号?限制词。
贪婪匹配体现了最大化匹配原则,惰性匹配则体现最小化匹配原则。
**示例****2**
**var** s = "<html><head><title></title></head><body></body></html>";
**var** r = /<.*?>/
**var** a = s.match(r); //返回单个元素数组["<html>"]
在上面示例中,对于正则表达式 /<.*?>/ 来说,它可以返回匹配字符串 "<>",但是为了能够确保匹配条件成立,在执行中还是匹配了带有 4 个字符的字符串“html”。惰性取值不能够以违反模式限定的条件而返回,除非没有找到符合条件的字符串,否则必须满足它。能匹配就一定要匹配;能匹配最短的,就不要匹配更长的;针对 6 种重复类惰性匹配的简单描述如下:{n,m}?:尽量匹配 n 次,但是为了满足限定条件也可能最多重复 m 次。{n}?:尽量匹配 n 次。{n,}?:尽量匹配 n 次,但是为了满足限定条件也可能匹配任意次。??:尽量匹配,但是为了满足限定条件也可能最多匹配 1 次,相当于 {0,1}?。+?:尽量匹配 1 次,但是为了满足限定条件也可能匹配任意次,相当于 {1,}?。*? :尽量不匹配,但是为了满足限定条件也可能匹配任意次,相当于 {0,}?。