阿西河

所有教程

公众号
🌙
阿西河前端的公众号

我的收藏

    最近访问  (文章)

      教程列表

      抓包专区
      测试专区

      JS 正则表达式 [@@matchAll]()

       [@@matchAll]方法返回对字符串使用正则表达式的所有匹配项。

      {{EmbedInteractiveExample(“pages/js/regexp-prototype-@@matchall.html”)}}

      The source for this interactive example is stored in a GitHub repository. If you’d like to contribute to the interactive examples project, please clone https://github.com/mdn/interactive-examples and send us a pull request.

      语法

      regexp[Symbol.matchAll](str)
      

      参数

      str

      一个String的匹配对象。

      返回值

      一个迭代器

      描述

      本方法在String.prototype.matchAll()中被内部调用。例如,以下两个示例返回相同的结果。

      'abc'.matchAll(/a/);
      
      /a/[Symbol.matchAll]('abc');
      

      本方法用于自定义RegExp子类中的匹配行为。

      示例

      直接调用

      本方法的使用方法几乎与String.prototype.matchAll()相同,除了this 的不同以及参数顺序的的差异。

      var re = /[0-9]+/g;
      var str = '2016-01-02';
      var result = re[Symbol.matchAll](str);
      
      console.log(Array.from(result, x => x[0]));  
      // ["2016", "01", "02"]
      
      

      在子类中使用@@matchAll

      RegExp的子类可以重写[@@matchAll]()方法来修改默认行为。例如,返回一个Array而不是iterator

      class MyRegExp extends RegExp {
        [Symbol.matchAll](str) {
          var result = RegExp.prototype[Symbol.matchAll].call(this, str);
          if (!result) { 
            return null;
          } else {
            return Array.from(result);
          }
        }
      }
      
      var re = new MyRegExp('([0-9]+)-([0-9]+)-([0-9]+)', 'g');
      var str = '2016-01-02|2019-03-07';
      var result = str.matchAll(re);
      console.log(result[0]); // [ "2016-01-02", "2016", "01", "02" ]
      console.log(result[1]); // [ "2019-03-07", "2019", "03", "07" ]
      
      

      相关链接

      目录
      目录