Javascript正则表达式中的惰性量词

最近在看《Javascript高级程序设计》觉得写得很不错,项目实践体验后,在看这种书,体会很深,觉得很多知识都是恍然大悟了。看到正则表达式那张,讲到非捕获性分组的时候,有一个过滤html标签的例子,不是很明白:

/<(?:.|\s)*?>/g

对于第二个问号,我不是很理解,于是就去查资料,才发现原来这个是惰性匹配,在贪婪量词的后面加多一个?就变成了惰性量词,它的匹配过程相反,是从前面第一个开始,不匹配则加一个,如此循环直到字符串结束,以上面的为例子。
var s = "abbbaabbbaaabbb1234";
var re1=/.*?bbb/g;     //*?是惰性量词
re1.test(s);
它的匹配过程如下:
re1.test("a");      //false,  再加一个
re1.test("ab");      //false,  再加一个
re1.test("abb");      //false,  再加一个
re1.test("abbb");      //true,  匹配了,保存这个结果,再从下一个开始
re1.test("a");      //false,  再加一个
re1.test("aa");      //false,  再加一个
re1.test("aab");      //false,  再加一个
re1.test("aabb");      //false,  再加一个
re1.test("aabbb");      //true,  匹配了,保存这个结果,再从下一个开始。


原来是这样啊,明白了!

 

ps:其实html标签的匹配一种简单的正则表达式为:/<[^>]*>/

转载于:https://www.cnblogs.com/kathy-qiqi/archive/2012/10/21/2732964.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值