RegExp.prototype[@@search]()

[@@search]() メソッドは、this 正規表現と文字列の間で一致させるための検索を実行します。

試してみましょう

構文

regexp[Symbol.search](str)

引数

str

検索対象の String です。

返値

integer

成功した場合、[@@search]() は文字列内で正規表現に最初に一致したインデックスを返します。そうではない場合、-1 を返します。

解説

このメソッドは、 String.prototype.search() の内部で呼び出されます。たとえば、次の 2 つの例は同じ結果を返します。

'abc'.search(/a/);

/a/[Symbol.search]('abc');

このメソッドは、RegExp サブクラスで検索動作をカスタマイズするために存在しています。

直接呼出し

このメソッドは、this と引数順が異なることを除いて String.prototype.search() とほぼ同じ方法で使用できます。

var re = /-/g;
var str = '2016-01-02';
var result = re[Symbol.search](str);
console.log(result);  // 4

サブクラスでの @@search の使用

RegExp のサブクラスは、動作を修正するために [@@search]() メソッドをオーバーライドできます。

class MyRegExp extends RegExp {
  constructor(str) {
    super(str)
    this.pattern = str;
  }
  [Symbol.search](str) {
    return str.indexOf(this.pattern);
  }
}

var re = new MyRegExp('a+b');
var str = 'ab a+b';
var result = str.search(re); // String.prototype.search は再定義した [@@search] を呼び出す。
console.log(result); // 3

仕様書

Specification
ECMAScript Language Specification
# sec-regexp.prototype-@@search

ブラウザーの互換性

BCD tables only load in the browser

関連情報