美文网首页
正则匹配

正则匹配

作者: 稀缺物种__ | 来源:发表于2017-04-01 12:28 被阅读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'
    

    相关文章

      网友评论

          本文标题:正则匹配

          本文链接:https://www.haomeiwen.com/subject/daliottx.html