如题,既然正则的非贪婪模式是匹配少的字符,如下代码:
<script type="text/javascript">
var a="fooood";
var d=/(fo+?)/g;
console.log(a.match(d));
</script>
这样的话是说明o后面最少匹配,所以出现就会匹配fo
,
疑问是下面的代码:
<script type="text/javascript">
var a="aabab";
var d=/(a*?b)/g;
console.log(a.match(d));
</script>
既然a是最少匹配,那么不应该匹配的是ab,ab么,为什么最后结果是aab
;ab
,希望帮忙解答一下,我理解上的错误,谢谢
首先正则是很复杂,很巧妙的。
你举的这个例子说明贪婪模式和非贪婪模式是不对的。
啥是贪婪模式,和非贪婪模式?
贪婪模式,就是“贪得无厌”,有了还要,有多少要多少,指导没有(字符串尾)。
非贪婪模式,恰好相反,匹配了就不要了,就得到结果。
我先举一个例子来说明,贪婪模式和非贪婪模式,只在你的基础上稍稍改动,为了后面对比说明。
注意,比你那个多了一个".",表示任意字符。
上面这个是贪婪模式,a和b之间可以有任意字符,他一直“贪婪”找到了最后一个b,得到的结果是: aabab
现在来看,非贪婪模式:
得到的结果是["aab","ab"],找到一组匹配就找第二组(这里使用了g的)。
再回过头来看你的
首先分析你正则表达式,表示匹配内容为:任意个a,末尾是b(注意中间不能是其他字符,只能是a)。
得到的结果是:["aab","ab"]。
你的意思是,应该得到aabab,但是实际情况是,你的正则要的有任意a(不能有b),试问它怎么继续匹配得到aabab呢。
所以说,用你举的例子来说明贪婪模式和非贪婪模式是不对的。
你没有先从正则表达式本身去分析,而是一心扑在了对贪婪模式和非贪婪模式的理解上去了。
理解了上面的,再来看这个,我想就应该明白了:
贪婪模式:
非贪婪模式: