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