この記事は編集レビューを必要としています。ぜひご協力ください。
[@@match]()
メソッドは、文字列と正規表現が一致したマッチを取得します。
構文
regexp[Symbol.match](str)
パラメーター
str
- マッチの対象となる
String
。
戻り値
マッチした全体の結果と括弧が捕捉したマッチの結果を含む Array
。一致するものがなかった場合は、null
。
説明
このメソッドは、String.prototype.match()
で内部的に呼び出されます。たとえば、次の 2 つの例は同じ結果を返します:
'abc'.match(/a/); /a/[Symbol.match]('abc');
このメソッドは、RegExp
サブクラス内でマッチの振る舞いをカスタマイズするために存在しています。
例
直接呼出し
このメソッドは、this
の違いと引数の並び順の違いを除いて、String.prototype.match()
とほとんど同じ使い方ができます。
var re = /[0-9]+/g; var str = '2016-01-02'; var result = re[Symbol.match](str); console.log(result); // ["2016", "01", "02"]
サブクラスで @@match
を使用する
RegExp
のサブクラスは、既定の動作を修正するために [@@match]()
メソッドをオーバーライドできます。
class MyRegExp extends RegExp { [Symbol.match](str) { var result = RegExp.prototype[Symbol.match].call(this, str); if (!result) return null; return { group(n) { return result[n]; } }; } } var re = new MyRegExp('([0-9]+)-([0-9]+)-([0-9]+)'); var str = '2016-01-02'; var 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
仕様
仕様 | 状態 | コメント |
---|---|---|
ECMAScript 2015 (6th Edition, ECMA-262) RegExp.prototype[@@match] の定義 |
標準 | 初期定義。 |
ECMAScript 2017 Draft (ECMA-262) RegExp.prototype[@@match] の定義 |
ドラフト |
ブラウザ実装状況
機能 | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|
基本サポート | (有) | 49 (49) | 未サポート | (有) | (有) |
機能 | Android | Chrome for Android | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile |
---|---|---|---|---|---|---|
基本サポート | (有) | (有) | 49.0 (49) | 未サポート | (有) | (有) |