--- title: 'RegExp.prototype[@@match]()' slug: Web/JavaScript/Reference/Global_Objects/RegExp/@@match tags: - JavaScript - Method - Prototype - Reference - RegExp - Regular Expression translation_of: Web/JavaScript/Reference/Global_Objects/RegExp/@@match ---
[@@match]() メソッドは、文字列の正規表現に一致した部分を取得します。
regexp[Symbol.match](str)
str一致した全体の結果と括弧が捕捉した一致箇所の結果を含む {{jsxref("Array")}}。一致するものがなかった場合は、{{jsxref("null")}}。
このメソッドは、{{jsxref("String.prototype.match()")}} で内部的に呼び出されます。
たとえば、次の 2 つの例は同じ結果を返します。
'abc'.match(/a/);
/a/[Symbol.match]('abc');
このメソッドは、RegExp サブクラス内で一致の振る舞いをカスタマイズするために存在しています。
このメソッドは、ほとんど {{jsxref("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"]
{{jsxref("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
| 仕様書 |
|---|
| {{SpecName('ESDraft', '#sec-regexp.prototype-@@match', 'RegExp.prototype[@@match]')}} |
{{Compat("javascript.builtins.RegExp.@@match")}}