The [@@matchAll]
method returns all matches of the regular expression against a string.
regexp[Symbol.matchAll](str)
str
String
that is a target of the match.An iterator.
This method is called internally in String.prototype.matchAll()
. For example, the following two examples return same result.
'abc'.matchAll(/a/); /a/[Symbol.matchAll]('abc');
This method exists for customizing the behavior of matchAll()
in RegExp
subclasses.
This method can be used in almost the same way as String.prototype.matchAll()
, except for the different value of this
and the different order of arguments.
let re = /[0-9]+/g; let str = '2016-01-02'; let result = re[Symbol.matchAll](str); console.log(Array.from(result, x => x[0])); // ["2016", "01", "02"]
Subclasses of RegExp
can override the [@@matchAll]()
method to modify the default behavior.
For example, to return an Array
instead of an iterator:
class MyRegExp extends RegExp { [Symbol.matchAll](str) { const result = RegExp.prototype[Symbol.matchAll].call(this, str); if (!result) { return null; } else { return Array.from(result); } } } const re = new MyRegExp('([0-9]+)-([0-9]+)-([0-9]+)', 'g'); const str = '2016-01-02|2019-03-07'; const result = str.matchAll(re); console.log(result[0]); // [ "2016-01-02", "2016", "01", "02" ] console.log(result[1]); // [ "2019-03-07", "2019", "03", "07" ]
Specification |
---|
ECMAScript (ECMA-262) The definition of 'RegExp.prototype[@@matchAll]' in that specification. |
Desktop | ||||||
---|---|---|---|---|---|---|
@@matchAll |
73 | 79 | 67 | No | 60 | 13 |
Mobile | ||||||
---|---|---|---|---|---|---|
@@matchAll |
73 | 73 | 67 | 52 | 13 | 5.0 |
Server | |
---|---|
@@matchAll |
12.0.0 |
© 2005–2018 Mozilla Developer Network and individual contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://wiki.developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/@@matchAll