このページはコミュニティーの尽力で英語から翻訳されました。MDN Web Docsコミュニティーについてもっと知り、仲間になるにはこちらから。
RegExp.prototype[Symbol.search]()
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since 2016年9月.
[Symbol.search]() はRegExp インスタンスのメソッドで、String.prototype.search がどのように動作するのかを指定します。
In this article
試してみましょう
class RegExp1 extends RegExp { constructor(str) { super(str); this.pattern = str; } [Symbol.search](str) { return str.indexOf(this.pattern); }}console.log("table football".search(new RegExp1("foo")));// 予想される結果: 6構文
regexp[Symbol.search](str)引数
返値
正規表現で指定された文字列が最初に一致したインデックスの値、または一致する文字列が見つからなかった場合は-1 を返します。
解説
このメソッドは、String.prototype.search() の内部で呼び出されます。たとえば、次の 2 つの例は同じ結果を返します。
"abc".search(/a/);/a/[Symbol.search]("abc");このメソッドはSymbol.split や[Symbol.matchAll]() とは異なり、正規表現をコピーしません。しかし、[Symbol.match]() や[Symbol.replace]() とは異なり、実行を始めるときにはlastIndex を 0 に設定し、終了するときには前回の値に戻すので、一般的に副作用を避けることができます。つまり、このメソッドではg フラグは効果がなく、lastIndex が 0 でない場合でも常に文字列の最初に一致した部分を返します。これは、粘着的正規表現が常に文字列の先頭を厳密に検索することも意味しています。
const re = /[abc]/g;re.lastIndex = 2;console.log("abc".search(re)); // 0const re2 = /[bc]/y;re2.lastIndex = 1;console.log("abc".search(re2)); // -1console.log("abc".match(re2)); // [ 'b' ][Symbol.search]() は常に正規表現のexec() を 1 回だけ呼び出し、結果のindex プロパティを返すか、結果がnull の場合は-1 を返します。
このメソッドは、RegExp サブクラスで検索動作をカスタマイズするために存在しています。
例
>直接呼出し
このメソッドは、this と引数順が異なることを除いてString.prototype.search() とほぼ同じ方法で使用できます。
const re = /-/g;const str = "2016-01-02";const result = re[Symbol.search](str);console.log(result); // 4サブクラスでの[Symbol.search]() の使用
RegExp のサブクラスは、動作を修正するために[Symbol.search]() メソッドをオーバーライドできます。
class MyRegExp extends RegExp { constructor(str) { super(str); this.pattern = str; } [Symbol.search](str) { return str.indexOf(this.pattern); }}const re = new MyRegExp("a+b");const str = "ab a+b";const result = str.search(re); // String.prototype.search は再定義した [Symbol.search] を呼び出す。console.log(result); // 3仕様書
| Specification |
|---|
| ECMAScript® 2026 Language Specification> # sec-regexp.prototype-%symbol.search%> |