String.prototype.search()

search() メソッドは、正規表現とこの String オブジェクトが一致するかどうかを調べます。

試してみましょう

構文

js
search(regexp)

引数

regexp

正規表現オブジェクト、または Symbol.search メソッドを持つ任意のオブジェクトです。

regexpRegExp オブジェクトでなく、Symbol.search メソッドもなかった場合は、RegExp オブジェクトに new RegExp(regexp) を使用して暗黙的に変換されます。

返値

与えられた文字列と正規表現の間で最初に一致した箇所のインデックスを返します。一致しなかった場合は -1 を返します。

解説

String.prototype.search() 自体の実装はとてもシンプルです。引数の文字列を最初の引数として Symbol.search メソッドを呼び出すだけです。実際の実装は RegExp.prototype[@@search]() から来ています。

regexpg フラグは search() の結果には影響がなく、検索は常に正規表現の lastIndex が 0 であるかのように行われます。search() の動作についての詳しい情報は、RegExp.prototype[@@search]() を参照してください。

パターンが見つかるかどうかを知りたい場合、かつ、文字列内のインデックスを知りたい場合は、search() を使用してください。

  • パターンが存在するかどうかを知りたいだけであれば、RegExp.prototype.test() メソッドを使用してください。これは論理値を返します。
  • 一致したテキストの内容が必要な場合は、match() または RegExp.prototype.exec() を使用してください。

search() の使用

次の例は、2 つの異なる正規表現オブジェクトで文字列を検索し、成功した検索(正の値)と失敗した検索 (-1) を表示します。

js
const str = "hey JudE";
const re = /[A-Z]/;
const reDot = /[.]/;
console.log(str.search(re)); // 最初の大文字 "J" のインデックスである 4 を返します
console.log(str.search(reDot)); // ドット記号 '.' が見つからないので -1 を返します

仕様書

Specification
ECMAScript Language Specification
# sec-string.prototype.search

ブラウザーの互換性

BCD tables only load in the browser

関連情報