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 match behavior within RegExp
subclasses.
Examples
Direct call
This method can be used in almost the same way as String.prototype.matchAll()
, except the different this
and the different arguments order.
var re = /[0-9]+/g;
var str = '2016-01-02';
var result = re[Symbol.matchAll](str);
console.log(
);
// ["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) { 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" ]
Specifications
Specification | Status | Comment |
---|---|---|
ECMAScript Latest Draft (ECMA-262) The definition of 'RegExp.prototype[@@matchAll]' in that specification. |
Draft |
Browser compatibility
Desktop | Mobile | Server | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
@@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