RegExp.prototype[@@matchAll]()

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

{{EmbedInteractiveExample("pages/js/[email protected]@matchall.html")}}

语法

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

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" ]

浏览器兼容性

Update compatibility data on GitHub
Desktop Mobile Server
Chrome Edge Firefox Internet Explorer Opera Safari Android webview Chrome for Android Firefox for Android Opera for Android Safari on iOS Samsung Internet Node.js
@@matchAll Chrome Full support 73 Edge No support No Firefox Full support 67 IE No support No Opera Full support 60 Safari No support No WebView Android Full support 73 Chrome Android Full support 73 Firefox Android Full support 67 Opera Android Full support 52 Safari iOS No support No Samsung Internet Android Full support 5.0 nodejs Full support 12.0.0

Legend

Full support  
Full support
No support  
No support

相关链接