zoukankan      html  css  js  c++  java
  • 正则表达式小括号的多义性

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

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

    一、限定量词作用的范围

    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('')
    }
    

      

  • 相关阅读:
    搜索回车跳转页面
    登录验证码
    【排序算法】排序算法之插入排序
    PAT 乙级 1044 火星数字 (20 分)
    PAT 甲级 1035 Password (20 分)
    PAT 甲级 1041 Be Unique (20 分)
    PAT 甲级 1054 The Dominant Color (20 分)
    PAT 甲级 1027 Colors in Mars (20 分)
    PAT 甲级 1083 List Grades (25 分)
    PAT 甲级 1005 Spell It Right (20 分)
  • 原文地址:https://www.cnblogs.com/snandy/p/3650309.html
Copyright © 2011-2022 走看看