regrex扩展

2018-08-20  本文已影响0人  陶六六

正则的扩展

  1. u修饰符 支持unicode字符匹配

    • .字符能匹配unicode字符
    • unicode字符表示法\u{}
    • 量词能准确匹配双字符unicode字符数量
    • \S等预设字符集包含unicode字符
    • i修饰符能匹配字形相近unicode字符
    • \p{} \P{} 可以匹配指定unicode字符集
  2. y修饰符 全局头部匹配

  3. s修饰符 .字符增加匹配换行符

  4. RegRex原型属性

    • RegExp.prototype.unicode 是否设置u修饰符
    • RegExp.prototype.sticky 是否设置y修饰符
    • RegExp.prototype.dotAll 是否设置s修饰符
    • RegExp.prototype.flags 返回所有设置的修饰符
  5. 环视

        /x(?=y)/.exec('xxyy') //正向肯定环视 [x,index:1]
        /x(?!y)/.exec('xxyy') //正向否定环视 [x,index:0]
        /(?<=x)y/.exec('xxyy') //逆向肯定环视 [y,index:2]
        /(?<!x)y/.exec('xxyy') //逆向否定环视 [y,index:3]
    
        'xxyyy'.replace(/(?<=y)y/g,'x')
        //匹配以原始串匹配,环视可以在当前起始位置之前 xxyxx
    
        /(?<=(\d+)(\d+))$/.exec('1053') // ["", "1", "053"]
        // 逆向环视+字符自右向左贪婪
        /^(\d+)(\d+)$/.exec('1053') // ["1053", "105", "3"]
        // 普通匹配+字符自左向右贪婪
    
        /(?<=(o)d\1)r/.exec('hodor')  // null
        /(?<=\1d(o))r/.exec('hodor')  // ["r", "o"] //反向引用在匹配字符之前
    
  6. 具名组匹配 (?<name>regrex)

        const RE_DATE = /(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})/
        const matchObj = RE_DATE.exec('1999-12-31')
        const year = matchObj.groups.year // 1999
        const month = matchObj.groups.month // 12
        const day = matchObj.groups.day // 31
    
        replace(/(?<name>x)y\k<name>/,'$<name>')
        // 反向引用具名组匹配 \k<name> $<name>
    

tips

  1. .字符匹配所有字符需要us修饰符
        /^.{2}$/.test('𠮷\n') // false
        /^.{2}$/u.test('𠮷\n') // false
        /^.{2}$/s.test('𠮷\n') // false
        /^.{2}$/us.test('𠮷\n') // true
    
  2. regrex括号整理
        /(x)/ //组匹配
        /(?:x)/ //非组匹配
        /(?<name>x)/ //具名组匹配
        /x(?=y)/ // 正向肯定环视
        /x(?!y)/ // 正向否定环视
        /(?<=x)y/ // 逆向肯定环视
        /(?<!x)y/ // 逆向否定环视
    
上一篇 下一篇

猜你喜欢

热点阅读