--- 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")}}