RegExp.prototype[@@match]()
[@@match]()
メソッドは、文字列の正規表現に一致した部分を取得します。
試してみましょう
構文
regexp[Symbol.match](str)
引数
str
-
一致の対象となる
String
。
返値
解説
このメソッドは、String.prototype.match()
で内部的に呼び出されます。
たとえば、次の 2 つの例は同じ結果を返します。
'abc'.match(/a/);
/a/[Symbol.match]('abc');
このメソッドは、RegExp
サブクラス内で一致の振る舞いをカスタマイズするために存在しています。
例
直接呼び出し
このメソッドは、ほとんど String.prototype.match()
と同じ方法で使用することができますが、 this
と引数の並び順が異なります。
let re = /[0-9]+/g;
let str = '2016-01-02';
let result = re[Symbol.match](str);
console.log(result); // ["2016", "01", "02"]
サブクラスで @@match を使用
RegExp
のサブクラスは、既定の動作を修正するために [@@match]()
メソッドをオーバーライドできます。
class MyRegExp extends RegExp {
[Symbol.match](str) {
let result = RegExp.prototype[Symbol.match].call(this, str);
if (!result) return null;
return {
group(n) {
return result[n];
}
};
}
}
let re = new MyRegExp('([0-9]+)-([0-9]+)-([0-9]+)');
let str = '2016-01-02';
let result = str.match(re); // String.prototype.match calls re[@@match].
console.log(result.group(1)); // 2016
console.log(result.group(2)); // 01
console.log(result.group(3)); // 02
仕様書
Specification |
---|
ECMAScript Language Specification # sec-regexp.prototype-@@match |
ブラウザーの互換性
BCD tables only load in the browser