The [@@matchAll]
method returns all matches of the regular expression against a string.
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.
Syntax
regexp[Symbol.matchAll](str)
Parameters
str
- A
String
that is a target of the match.
Return value
An iterator.
Description
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.
Examples
Direct call
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"]
Using @@matchAll in subclasses
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" ]
Specifications
Specification |
---|
ECMAScript (ECMA-262) The definition of 'RegExp.prototype[@@matchAll]' in that specification. |
Browser compatibility
The compatibility table on this page is generated from structured data. If you'd like to contribute to the data, please check out https://github.com/mdn/browser-compat-data and send us a pull request.
Desktop | Mobile | Server | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
@@matchAll | Chrome Full support 73 | Edge Full support 79 | 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