• 正则表达式小括号的多义性


    小括号在正则表达式这有以下意义

    • 限定量词作用的范围
    • 限定多选结构的范围
    • 为反向引用捕获文本
    • 分组捕获
    • 只分组不捕获
    • 前瞻

    一、限定量词作用的范围

    var reg1 = /(Matz)?/; // 0或1个Matz
    var reg2 = /(Matz)+/; // 1个以上Matz
    var reg3 = /(Matz)*/; // 0或多个Matz
    

      

    二、限定多选结构的范围

    var reg = /(Matz|Eich)/
    reg.test('Matz') // => true
    reg.test('Eich') // => true
    reg.test('John') // => false
    

      

    三、为反向引用捕获文本

    var reg = /(boy)1/ // 相当于 /boyboy/
    reg.test('boy') // => false
    reg.test('boyboy') // => true
    
    var reg /(boy)(girl)12/
    reg.test('boygirlboygirl') // => true
    

      

    四、分组捕获

    var reg1 = /(d{3}) (d{3})/
    var str = '111 222'
    str.replace(reg1, '$2 $1') // => '222 111' , 注意这里的$2,$1,存放了匹配的字符串
    
    var reg2 = /(d{3})(d{4})(d{4})/
    var mobile = '13522722724'
    reg2.test(mobile)
    RegExp.$1 // => 135
    RegExp.$2 // => 2272
    RegExp.$3 // => 2724
    
    var reg3 = /(d{3})(d{4})(d{4})/
    var mobile = '13522722724'
    mobile.replace(reg3, '$1 $2 $3') // => '135 2272 2724'
    

      

    五、只分组不捕获(和 "?:" 一起)

    var reg = /(?:d+)/
    reg.test('13522722724')
    RegExp.$1 // => '' 不存储匹配的元素
    

    较长的正则表达式中,反向引用会降低匹配速度,性能降低,不需要反向引用时应使用分组不捕获。

    六、前瞻(lookahead,和 "?=" 一起)

    它告诉正则表达式向前看一些字符但不移动位置,前瞻不匹配任何字符只匹配文本中的特定位置。

    var reg = /(John) (?=Resig)/
    reg.test('John') // => false
    reg.test('John Backus') // => false
    reg.test('John Reisg') // => true
    RegExp.$1 // => 'John',注意这里不是 "John Resig"
    

    如下是一个利用前瞻实现手机号格式化的小函数

    /*
     * 手机号分隔
     * 13522722724 -> 135 2272 2724
     */
    function separateMobile(num) {
        var arr = ( '0' + num ).replace(/(d{4})(?=d)/g,"$1 ").split('')
        arr.shift()
        return arr.join('')
    }
    

      

  • 相关阅读:
    存储过程
    sdsdsd
    sdsdd
    sdsd
    sdasd
    mysql触发
    c#连接mysql答题步骤
    c#mysql数据库
    nginx
    linux如何查看端口被何进程占用
  • 原文地址:https://www.cnblogs.com/snandy/p/3650309.html
Copyright © 2020-2023  润新知