zoukankan      html  css  js  c++  java
  • 正则的扩展

    1.RegExp构造函数

    ES5中有两种情况
    let regex = new RegExp('xyz', 'i')
    // 等价于
    let regex = /xyz/i
    
    let regex = new RegExp(/xyz/i)
    // 等价于
    let regex = /xyz/i
    

    注意!!!

    let regex = new RegExp(/xyz/, 'i')
    // 这种写法是错误的
    
    ES6的改变
    new RegExp(/abc/ig, 'i').flags
    // 第二个参数i会将前面的ig进行覆盖
    

    2.字符串的正则方法

    • match() 方法可在字符串内检索指定的值,或找到一个或多个正则表达式的匹配
    let str="1 plus 2 equal 3"
    str.match(/d+/g)
    // ['1','2','3']
    
    • replace() 方法用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串
    let str = 'nihao Jack'
    str.replace(/Jack/, 'Lucy')
    // nihao Lucy
    
    • search() 方法用于检索字符串中指定的子字符串,或检索与正则表达式相匹配的子字符串
    let str = 'good body'
    str.search(/body/)
    // 5
    
    let str = 'good body'
    str.search(/girl/)
    // -1
    
    • split() 方法用于把一个字符串分割成字符串数组
    let str = 'good body'
    str.split('o')
    ["g", "", "d b", "dy"]
    

    3.u修饰符

    • ES6 对正则表达式添加了u修饰符,含义为“Unicode 模式”,用来正确处理大于uFFFF的 Unicode 字符。也就是说,会正确处理四个字节的 UTF-16 编码。

    4.RegExp.prototype.unicode 属性

    • 正则实例对象新增unicode属性,表示是否设置了u修饰符
    let str = /hello/;
    let str2 = /hello/u;
    
    str.unicode // false
    str2.unicode // true
    

    5.y修饰符

    • y修饰符,叫做“粘连”(sticky)修饰符。
    • y修饰符的作用与g修饰符类似,也是全局匹配,后一次匹配都从上一次匹配成功的下一个位置开始。不同之处在于,g修饰符只要剩余位置中存在匹配就可,而y修饰符确保匹配必须从剩余的第一个位置开始,这也就是“粘连”的涵义。
    let str = 'aaa_aa_a'
    let reg1 = /a+/g
    let reg2 = /a+/y
    
    reg1.exec(s) // ['aaa']
    reg2.exec(s) // ['aaa']
    
    reg1.exec(s) // ['aa']
    reg2.exec(s) // null y修饰符从剩余项的第一个位置开始(即_)所以找不到
    
    lastIndex属性可以指定每次搜索的开始位置
    
    reg2.lastsIndex = 1
    reg2.exec(s) // ['aa']
    
    实际上y修饰符号隐含了头部匹配的标志^
    
    • 单单一个y修饰符对match方法,只能返回第一个匹配,必须与g修饰符联用,才能返回所有匹配。
    'a1a2a3'.match(/ad/y) // ['a1']
    'a1a2a3'.match(/ad/gy) // ['a1','a2','a3']
    

    6.RegExp.prototype.sticky 属性

    • 表示是否设置了y修饰符

    7.RegExp.prototype.flags 属性

    • 会返回正则表达式的修饰符

    8.s 修饰符:dotAll 模式

    9.后行断言

    10.Unicode 属性类

    11.具名组匹配

    • 正则表达式使用圆括号进行组匹配
    const REG = /(d{4})-(d{2})-(d{2})/
    
    const matchObj = REG.exec('1999-12-31')
    const year = matchObj[1]; // 1999
    const month = matchObj[2]; // 12
    const day = matchObj[3]; // 31
    

    问题: 只能用数字序号引用,组的顺序改变,引用的时候就必须修改序号

    • 具名组匹配,允许为每一个组匹配指定一个名字,既便于阅读代码,又便于引用
    const REG = /(?<year>d{4})-(?<month>d{2})-(?<day>d{2})/
    
    const matchObj = REG.exec('1999-12-31')
    const year = matchObj.groups.year // 1999
    const month = matchObj.groups.month // 12
    const day = matchObj.groups.day // 31
    
    如果具名组没有匹配,那么对应的groups对象属性会是undefined
    

    12.解构赋值和替换

    • 有了具名组匹配以后,可以使用解构赋值直接从匹配结果上为变量赋值
    let {groups: {one, two}} = /^(?<one>.*):(?<two>.*)$/u.exec('foo:bar')
    
    console.log({one, two}) // {one: 'foo', two: 'bar'}
    
  • 相关阅读:
    3.nginx反向代理服务器+负载均衡
    2.nginx整合PHP
    nginx-location rewrite
    Nginx(一):安装
    修改host文件原理 localhost,127.0.0.1之间有什么区别
    一个IP绑定多个域名
    私有IP
    转:Hadoop和Spark的异同
    C#中Trim()、TrimStart()、TrimEnd()的用法
    Java操作redis
  • 原文地址:https://www.cnblogs.com/loveyt/p/10290455.html
Copyright © 2011-2022 走看看