RegExp.prototype[@@match]()

[@@match]() メソッドは、文字列正規表現に一致した部分を取得します。

構文

regexp[Symbol.match](str)

引数

str
一致の対象となる String

返値

一致した全体の結果と括弧が捕捉した一致箇所の結果を含む Array。一致するものがなかった場合は、null

解説

このメソッドは、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

仕様書

仕様書
ECMAScript (ECMA-262)
RegExp.prototype[@@match] の定義

ブラウザーの互換性

Update compatibility data on GitHub
デスクトップモバイルサーバー
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewAndroid 版 ChromeAndroid 版 FirefoxAndroid 版 OperaiOSのSafariSamsung InternetNode.js
@@matchChrome 完全対応 50Edge 完全対応 13Firefox 完全対応 49IE 未対応 なしOpera 完全対応 37Safari 完全対応 10WebView Android 完全対応 50Chrome Android 完全対応 50Firefox Android 完全対応 49Opera Android 完全対応 37Safari iOS 完全対応 10Samsung Internet Android 完全対応 5.0nodejs 完全対応 6.0.0

凡例

完全対応  
完全対応
未対応  
未対応

関連情報