正则匹配

2017-04-01  本文已影响0人  稀缺物种__

1.test在全局匹配下,连续的执行会报错,例如:

var reg = /a/g
reg.test('a')  //true
reg.test('a')  //false

原因是lastIndex导致出错,但是具体是为啥,我还没搞懂,先留着,以后弄懂了再补上。不过总而言之,test只是匹配是否存在,没必要用全局g,不用就是了。

2.贪婪.*和非贪婪.*?

简单理解就是,尽可能多和尽可能少的匹配。当匹配的值比较长和复杂的时候,有可能会出现重复尾部匹配的情况,非贪婪匹配能更精准的匹配。比如:

'abbb4bbb4'.match(/a.*4/)  // ['abbb4bbb4']
'abbb4bbb4'.match(/a.*?4/)  // ['abbb4']

3.?:?=?!

?:作用是在分组匹配的时候,不占用一个组位。实用性的话,我想了半天也没想出什么地方用比较合适,只能举一个大概会用到的例子。

//匹配家庭号码
'07956533869'.replace(/(\d{3,4})(\d{7,8})/,'$1')  
//'0795' 返回的是区号
'07956533869'.replace(/(?:\d{3,4})(\d{7,8})/,'$1')  
//'6533869' 返回的是电话号码

?=?!就是在匹配的时候,需要匹配该字符存在或不存在,但是不需要后续的操作

'12px'.match(/\d+(?=px)/) //['12']
'12px 13rem'.match(/\s\d+(?!px)/)  //[' 13']

//这个两个规则只能在后面匹配,不能在前面匹配,这我不知道为啥
'12px'.match(/(?=\d)px/) //null
'12px 13px'.match(/(?!\d)px/)  //'px'
上一篇下一篇

猜你喜欢

热点阅读