js正则贪婪模式_JS关于正则的非贪婪模式

首先正则是很复杂,很巧妙的。

你举的这个例子说明贪婪模式和非贪婪模式是不对的。

啥是贪婪模式,和非贪婪模式?

贪婪模式,就是“贪得无厌”,有了还要,有多少要多少,指导没有(字符串尾)。

非贪婪模式,恰好相反,匹配了就不要了,就得到结果。

我先举一个例子来说明,贪婪模式和非贪婪模式,只在你的基础上稍稍改动,为了后面对比说明。

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"]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值