1.首先看看下面的例子:
try{
str="
abcdefg
abcdefghijkl
";re1=str.match(/
[\W\w]+?/ig);
alert("非貪婪模式:\r\n\r\n1:"+re1[0]+"\r\n2:"+re1[1]);
re1=str.match(/
[\W\w]+/ig);
alert("貪婪模式:\r\n\r\n"+re1);
re1=str.match(/
(.+?)/i);
alert("非貪婪模式,且不要標記:\r\n\r\n1:"+re1[1]);
re1=str.match(/
(.+)/i);
alert("貪婪模式,且不要標記:\r\n\r\n"+re1[1]);
}catch(e){alert(e.description)}
匹配次數中的貪婪與非貪婪
在使用修飾匹配次數的特殊符號時,有幾種表示方法可以使同一個表達式能夠匹配不同的次數,比如:"{m,n}", "{m,}", "?", "*", "+",具體匹配的次數隨被匹配的字符串而定。這種重復匹配不定次數的表達式在匹配過程中,總是盡可能多的匹配。比如,針對文本 "dxxxdxxxd",舉例如下:
表達式
匹配結果
"\w+" 將匹配第一個 "d" 之后的所有字符 "xxxdxxxd"
"\w+" 將匹配第一個 "d" 和最后一個 "d" 之間的所有字符 "xxxdxxx"。雖然 "\w+" 也能夠匹配上最后一個 "d",但是為了使整個表達式匹配成功,"\w+" 可以 "讓出" 它本來能夠匹配的最后一個 "d"
更多的情況,舉例如下:
舉例1:表達式 "
(.*)" 與字符串 "aa
bb
" 匹配時,匹配的結果是:成功;匹配到的內容是 "aa
bb
" 整個字符串, 表達式中的 "" 將與字符串中最后一個 "" 匹配。舉例2:相比之下,表達式 "
(.*?)" 匹配舉例1中同樣的字符串時,將只得到 "aa
", 再次匹配下一個時,可以得到第二個 "bb
"。