1.正则表达式中 .* 与 .*?
是贪婪匹配与非贪婪匹配的区别。
比如说匹配输入串A: 101000000000100
使用 1.*1 将会匹配到1010000000001, 匹配方法: 先匹配至输入串A的最后, 然后向前匹配, 直到可以匹配到1, 称之为贪婪匹配。
使用 1.?1 将会匹配到101, 匹配方法: 匹配下一个1之前的所有字符, 称之为非贪婪匹配。
所有带有量词的都是非贪婪匹配: .*?, .+?, .{2,6}? 甚至 .??
较为常用的元字符包括: “+”, “*”,以及 “?”。
“+”元字符规定其前导字符必须在目标对象中连续出现一次或多次。
“*”元字符规定其前导字符必须在目标对象中出现零次或连续多次。
“?”元字符规定其前导对象必须在目标对象中连续出现零次或一次。
后边多一个?表示懒惰模式。 必须跟在*或者+后边用 如:<img src="test.jpg" width="60px" height="80px"/> 如果用正则匹配src中内容非懒惰模式匹配 src=".*" 匹配结果是:src="test.jpg" width="60px" height="80px" 意思是从="往后匹配,直到最后一个"匹配结束
懒惰模式正则: src=".*?" 结果:src="test.jpg" 因为匹配到第一个"就结束了一次匹配。不会继续向后匹配。因为他懒惰嘛。 .表示除\n之外的任意字符 *表示匹配0-无穷
JS:
(.+)默认是贪婪匹配
(.+?)为惰性匹配
疑问号让.+的搜索模式从贪婪模式变成惰性模式。
var str = 'aaa<div style="font-color:red;">123456</div>bbb'
<.+?>会匹配<div style="font-color:red;">
<.+>会匹配<div style="font-color:red;">123456</div>
要在浏览器测试结果的话,输入:
var str = 'aaa<div style="font-color:red;">123456</div>bbb'
str.match(/<.+?>/);
str.match(/<.+>/);