zoukankan      html  css  js  c++  java
  • ES6正则拓展

    字符串的正则方法

    字符串对象共有 4 个方法,可以使用正则表达式:match()replace()search()split()

    ES6 将这 4 个方法,在语言内部全部调用RegExp的实例方法,从而做到所有与正则相关的方法,全都定义在RegExp对象上

    String.prototype.match 调用 RegExp.prototype[Symbol.match]

    String.prototype.replace 调用 RegExp.prototype[Symbol.replace]

    String.prototype.search 调用 RegExp.prototype[Symbol.search]

    String.prototype.split 调用 RegExp.prototype[Symbol.split]

    y 修饰符 

    除了u修饰符,ES6 还为正则表达式添加了y修饰符,叫做“粘连”(sticky)修饰符。

    y修饰符的作用与g修饰符类似,也是全局匹配,后一次匹配都从上一次匹配成功的下一个位置开始。不同之处在于,g修饰符只要剩余位置中存在匹配就可,

    y修饰符确保匹配必须从剩余的第一个位置开始,这也就是“粘连”的涵义。

    var s = 'aaa_aa_a';
    var r1 = /a+/g;
    var r2 = /a+/y;
    
    r1.exec(s) // ["aaa"]
    r2.exec(s) // ["aaa"]
    
    r1.exec(s) // ["aa"]
    r2.exec(s) // null

    上面代码有两个正则表达式,一个使用g修饰符,另一个使用y修饰符。这两个正则表达式各执行了两次,第一次执行的时候,两者行为相同,剩余字符串都是_aa_a。由于g修饰没有位置要求,所以第二次执行会返回结果,而y修饰符要求匹配必须从头部开始,所以返回null

    String.prototype.matchAll

    var regex = /t(e)(st(d?))/g;
    var string = 'test1test2test3';
    
    var matches = [];
    var match;
    while (match = regex.exec(string)) {
      matches.push(match);
    }
    
    matches
    // [
    //   ["test1", "e", "st1", "1", index: 0, input: "test1test2test3"],
    //   ["test2", "e", "st2", "2", index: 5, input: "test1test2test3"],
    //   ["test3", "e", "st3", "3", index: 10, input: "test1test2test3"]
    // ]
  • 相关阅读:
    SDOI2011古代朱文
    LIS 堆优化
    ZR2019 广州 游记
    LG2709 小B的询问
    [SCOI2009] 生日礼物
    [SDOI2008]沙拉公主的困惑
    [LG3396]哈希冲突
    ZROI2018.8.2 菜鸡互啄杯组队 ACM 赛
    ZROI 菜鸡互啄杯 III
    [LG4016] 负载平衡问题
  • 原文地址:https://www.cnblogs.com/cmy1996/p/9291110.html
Copyright © 2011-2022 走看看