1.test在全局匹配下,連續(xù)的執(zhí)行會(huì)報(bào)錯(cuò)耿戚,例如:
var reg = /a/g
reg.test('a') //true
reg.test('a') //false
原因是lastIndex
導(dǎo)致出錯(cuò)湿故,但是具體是為啥阿趁,我還沒(méi)搞懂,先留著坛猪,以后弄懂了再補(bǔ)上歌焦。不過(guò)總而言之,test
只是匹配是否存在砚哆,沒(méi)必要用全局g
独撇,不用就是了。
2.貪婪.*
和非貪婪.*?
簡(jiǎn)單理解就是躁锁,盡可能多和盡可能少的匹配纷铣。當(dāng)匹配的值比較長(zhǎng)和復(fù)雜的時(shí)候,有可能會(huì)出現(xiàn)重復(fù)尾部匹配的情況战转,非貪婪匹配能更精準(zhǔn)的匹配搜立。比如:
'abbb4bbb4'.match(/a.*4/) // ['abbb4bbb4']
'abbb4bbb4'.match(/a.*?4/) // ['abbb4']
3.?:
、?=
和?!
?:
作用是在分組匹配的時(shí)候槐秧,不占用一個(gè)組位啄踊。實(shí)用性的話,我想了半天也沒(méi)想出什么地方用比較合適刁标,只能舉一個(gè)大概會(huì)用到的例子颠通。
//匹配家庭號(hào)碼
'07956533869'.replace(/(\d{3,4})(\d{7,8})/,'$1')
//'0795' 返回的是區(qū)號(hào)
'07956533869'.replace(/(?:\d{3,4})(\d{7,8})/,'$1')
//'6533869' 返回的是電話號(hào)碼
?=
和?!
就是在匹配的時(shí)候,需要匹配該字符存在或不存在膀懈,但是不需要后續(xù)的操作
'12px'.match(/\d+(?=px)/) //['12']
'12px 13rem'.match(/\s\d+(?!px)/) //[' 13']
//這個(gè)兩個(gè)規(guī)則只能在后面匹配顿锰,不能在前面匹配,這我不知道為啥
'12px'.match(/(?=\d)px/) //null
'12px 13px'.match(/(?!\d)px/) //'px'