正则表达式中,懒惰匹配又称非贪婪匹配、勉强匹配。这里用一个去除 HTML 标签的例子来解释。
var str = "<div>11</div><div>22</div>";
alert(str.replace(/<(.)+>/gi, ""));
alert(str.replace(/<(.)+?>/gi, ""));
上面的代码,第一个 alert 为空白,第二个 alert 为 1122。
正则表达式中的 . 表示任意字符(不包括回车换行符)。
- 按第一种方式匹配的话,就是贪婪匹配,也就是说它一开始就找到了 <,到第五个字符就找到了 >,但它还不满足,还要往后找,直到找到最后一个 >,这样,它就把整个字符串当作是一个 HTML 标签了,所以一替换,就什么也没有了。
- 按第二种方式匹配的话,就是懒惰匹配,也就是说它一开始也找到了 <,到第五个字符就找到了 >,这时它满足了,就告诉我们,它已经找到了一个 HTML 标签,替换后,它又从 11 后面开始找……
可以看出懒惰匹配的特征是多了一个 ?。
相关阅读