--- title: 'RegExp.prototype[@@search]()' slug: Web/JavaScript/Reference/Global_Objects/RegExp/@@search tags: - JavaScript - Method - Prototype - Reference - RegExp - Regular Expression translation_of: Web/JavaScript/Reference/Global_Objects/RegExp/@@search ---
[@@search]() メソッドは、this 正規表現と文字列の間で一致させるための検索を実行します。
regexp[Symbol.search](str)
str[@@search]() は文字列内で正規表現に最初に一致したインデックスを返します。そうではない場合、-1 を返します。このメソッドは、 {{jsxref("String.prototype.search()")}} の内部で呼び出されます。たとえば、次の 2 つの例は同じ結果を返します。
'abc'.search(/a/);
/a/[Symbol.search]('abc');
このメソッドは、RegExp サブクラスで検索動作をカスタマイズするために存在しています。
このメソッドは、this と引数順が異なることを除いて {{jsxref("String.prototype.search()")}} とほぼ同じ方法で使用できます。
var re = /-/g; var str = '2016-01-02'; var result = re[Symbol.search](str); console.log(result); // 4
{{jsxref("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
| 仕様書 |
|---|
| {{SpecName('ESDraft', '#sec-regexp.prototype-@@search', 'RegExp.prototype[@@search]')}} |
{{Compat("javascript.builtins.RegExp.@@search")}}