匹配次數(shù)中的貪婪與非貪婪
在使用修飾匹配次數(shù)的特殊符號(hào)時(shí)臭脓,有幾種表示方法可以使同一個(gè)表達(dá)式能夠匹配不同的次數(shù)料仗,比如:"{m,n}", "{m,}", "?", "*", "+"睛低,具體匹配的次數(shù)隨被匹配的字符串而定台囱。這種重復(fù)匹配不定次數(shù)的表達(dá)式在匹配過(guò)程中茵典,總是盡可能多的匹配获黔。比如痹雅,針對(duì)文本 "dxxxdxxxd"仰担,舉例如下:
由此可見(jiàn),"\w+" 在匹配的時(shí)候绩社,總是盡可能多的匹配符合它規(guī)則的字符摔蓝。雖然第二個(gè)舉例中,它沒(méi)有匹配最后一個(gè) "d"愉耙,但那也是為了讓整個(gè)表達(dá)式能夠匹配成功贮尉。同理,帶 "*" 和 "{m,n}" 的表達(dá)式都是盡可能地多匹配朴沿,帶 "?" 的表達(dá)式在可匹配可不匹配的時(shí)候猜谚,也是盡可能的 "要匹配"。這 種匹配原則就叫作 "貪婪" 模式 赌渣。
非貪婪模式:
在修飾匹配次數(shù)的特殊符號(hào)后再加上一個(gè) "?" 號(hào)魏铅,則可以使匹配次數(shù)不定的表達(dá)式盡可能少的匹配,使可匹配可不匹配的表達(dá)式坚芜,盡可能的 "不匹配"览芳。這種匹配原則叫作 "非貪婪" 模式,也叫作 "勉強(qiáng)" 模式鸿竖。如果少匹配就會(huì)導(dǎo)致整個(gè)表達(dá)式匹配失敗的時(shí)候沧竟,與貪婪模式類似,非貪婪模式會(huì)最小限度的再匹配一些缚忧,以使整個(gè)表達(dá)式匹配成功悟泵。舉例如下,針對(duì)文本 "dxxxdxxxd" 舉例:
更多的情況搔谴,舉例如下:
舉例1:表達(dá)式 "<td>(.\*)</td>" 與字符串 "<td><p>aa</p></td> <td><p>bb</p></td>" 匹配時(shí)魁袜,匹配的結(jié)果是:成功;匹配到的內(nèi)容是 "<td><p>aa</p></td> <td><p>bb</p></td>" 整個(gè)字符串敦第, 表達(dá)式中的 "</td>" 將與字符串中最后一個(gè) "</td>" 匹配峰弹。
舉例2:相比之下,表達(dá)式 "<td>(.\*?)</td>" 匹配舉例1中同樣的字符串時(shí)芜果,將只得到 "<td><p>aa</p></td>"鞠呈, 再次匹配下一個(gè)時(shí),可以得到第二個(gè) "<td><p>bb</p></td>"右钾。
例子:雙引號(hào)換成單引號(hào)(此處為中文標(biāo)點(diǎn))
name = '“a”, “b”';
name.replace(/“([^“”]*?)”/g, "‘$1’");