主要不懂的就是.+ 和 .+?
.+我知道,就是忽略了第一个</a>一直匹配到结束,
可是.+?是什么意思?为什么没有忽略第一个</a>,加了?意思是尽可能少匹配,那尽可能少匹配多少?
var str = "<a>aaaa</a><a>bbbbbbb</a>";
alert(str.match(/<a>.+<\/a>/)[0]))
alert(str.match(/<a>.+?<\/a>/)[0])
.+我知道,就是忽略了第一个</a>一直匹配到结束,
可是.+?是什么意思?为什么没有忽略第一个</a>,加了?意思是尽可能少匹配,那尽可能少匹配多少?
var str = "<a>aaaa</a><a>bbbbbbb</a>";
alert(str.match(/<a>.+<\/a>/)[0]))
alert(str.match(/<a>.+?<\/a>/)[0])
var reg1=/a.+a/;
var reg2=/a.+?a/;
alert(str.match(reg1)[0]);
alert(str.match(reg2)[0]);
类似于这样
你大体可以认为贪婪匹配是从后往前走
而懒惰是从前往后走
只要匹配成功就结束
.+?这种是非贪婪模式贪婪模式下,正则表达式会匹配尽可能多的字符,不会管整个正则是否匹配成功非贪婪模式下,正则表达式会在满足整个正则表达式匹配成功的前提下,尽可能少的匹配字符。比如有字符串"aaaaaaaa"
.+会匹配到"aaaaaaaa"
.+?会匹配到"a"又比如有字符串"abcdefg"
.+d 这个正则表达式会匹配失败
.+?d 这个正则表达式则会匹配成功,匹配到的是"abcd"讲的不清不楚。。不知道你能不能明白。。
答:1).+为贪婪模式,如何理解贪婪模式,首先理解定义:贪婪模式在整个表达式匹配成功的前提下,尽可能多的匹配。关键理解:尽可能多。“+” 在正则表达匹配1次或者匹配1次以上,
那么在贪婪模式下,就是选则以1次以上进行字符匹配,所以叫贪婪模式。
2).+?为非贪婪模式,如何理解非贪婪模式,首先理解定义非贪婪模式在整个表达式匹配成功的前提下,尽可能少的匹配。如果理解了贪婪模式,那么非贪婪就是其反面,还是拿“+”举例,在非贪婪模式,就是先以1次进行匹配,如果1次不行在用1次以上进行匹配。不知道有没有理解,如果没理解,请详细看http://blog.csdn.net/zyloveyrf/article/details/6937797希望对你有帮助