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