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(/<.+>/);
