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标签的匹配一种简单的正则表达式为:/<[^>]*>/

posted @ 2012-10-21 21:18  王佩琪  阅读(212)  评论(0编辑  收藏  举报