String.prototype.search()

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.

search()String 値のメソッドで、正規表現とこの文字列の一致する箇所を検索し、文字列内の最初に一致する箇所の位置を返します。

試してみましょう

const paragraph = "I think Ruth's dog is cuter than your dog!";

// Anything not a word character, whitespace or apostrophe
const regex = /[^\w\s']/g;

console.log(paragraph.search(regex));
// Expected output: 41

console.log(paragraph[paragraph.search(regex)]);
// Expected output: "!"

構文

js
search(regexp)

引数

regexp

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

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

返値

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

解説

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

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

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

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® 2025 Language Specification
# sec-string.prototype.search

ブラウザーの互換性

Report problems with this compatibility data on GitHub
desktopmobileserver
Chrome
Edge
Firefox
Opera
Safari
Chrome Android
Firefox for Android
Opera Android
Safari on iOS
Samsung Internet
WebView Android
WebView on iOS
Deno
Node.js
search

Legend

Tip: you can click/tap on a cell for more information.

Full support
Full support

関連情報