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

      

  • 相关阅读:
    使用Notepad++进行php开发所必需的插件
    jquery操作复选框(checkbox)的12个小技巧总结
    深入理解拆箱
    史上最全UML的详细解析
    我理解的invoke和begininvoke
    java中的冒泡排序算法
    java中的选择排序算法
    Java实现将json中的数值插入到mysql中
    Java实现对mysql中的数值进行读取、插入、更新、删除
    Java连接MySQL数据库
  • 原文地址:https://www.cnblogs.com/snandy/p/3650309.html
Copyright © 2011-2022 走看看