Get to know MDN better
このページはコミュニティーの尽力で英語から翻訳されました。MDN Web Docs コミュニティーについてもっと知り、仲間になるにはこちらから。
This feature is well established and works across many devices and browser versions. It’s been available across browsers since 2015年7月.
exec() は RegExp インスタンスのメソッドで、指定された文字列の中でこの正規表現と一致するものを検索し、その結果の配列、または null を返します。
正規表現の照合を実施する文字列。すべての値は文字列に強制されますので、省略したり undefined を渡したりすると exec() は文字列 "undefined" を検索するようになりますが、これは望むところではないでしょう。
照合に失敗した場合は、 exec() メソッドは null を返し、 lastIndex を 0 に設定します。
照合に成功した場合、 exec() メソッドは配列を返し、正規表現オブジェクトの lastIndex プロパティを更新します。返された配列は、一致したテキストを最初の項目として持ち、その後、一致したテキストの括弧によるキャプチャグループに対して 1 つずつの項目を持ちます。
index文字列中で一致した位置の 0 から始まるインデックスです。
input照合対象であった元の文字列です。
groups名前付きキャプチャグループを示す null プロトタイプオブジェクトで、そのキーが名前となり、値がキャプチャグループ、またはキャプチャグループが定義されていなければ undefined です。詳しくはキャプチャグループを参照してください。
indices 省略可このプロパティは d フラグが設定されている場合にのみ存在します。これは配列で、それぞれの要素は部分文字列の一致した境界を表します。この配列のそれぞれの要素のインデックスは exec() が返す配列の中の一致する部分文字列のインデックスに対応します。言い換えれば、最初の indices 項目は照合する文字列全体を表し、2 つ目の indices 項目は最初のキャプチャグループなどを表します。各項目自身は 2 要素の配列で、最初の数字は一致の開始インデックスを表し、2 つ目の数字はその終了インデックスを表します。
配列 indices にはさらに groups プロパティがあり、すべての名前付きキャプチャグループの null プロトタイプオブジェクトを保持します。キーはキャプチャグループの名前であり、それぞれの値は 2 つ要素の配列で、最初の数字はキャプチャグループの始めるインデックス、 2 つ目の数字は終わりのインデックスです。正規表現に名前付きキャプチャグループが含まれていない場合、 groups は undefined となります。
JavaScript の RegExp オブジェクトは、 global または sticky フラグが設定されている場合(例えば /foo/g や /foo/y)はステートフルになります。これは前回の一致位置を lastIndex に格納します。これを内部的に使用することで、 exec() はテキストの文字列内で(キャプチャグループのある)複数の一致を反復処理することができます。これは単なる文字列の一致を取得する String.prototype.match() とは対照的です。
exec() を使用する場合、グローバルフラグは sticky フラグが設定されているときには影響しません。照合は常に粘着的に行われます。
exec() は正規表現のプリミティブメソッドです。他の多くの正規表現メソッドは、内部的に exec() を呼び出します。これは [Symbol.replace]() のような文字列のメソッドからも呼び出されます。exec() 自体は強力ですが(そして最も効率的です)、多くの場合、最も明確に意図を伝えるものではありません。
exec()は、上記のいずれの方法でも容易に実現できない複雑な操作に有用です。特に、手動で lastIndex を調整する必要がある場合に頻繁に使用されます。(String.prototype.matchAll() は正規表現をコピーするため、matchAll の反復処理中に lastIndex を変更しても反復処理には影響しません。)その一例については、lastIndex の巻き戻し を参照してください。
次の例を想像してみてください。
このスクリプト実行後の result の状態は次のようになります。
| [0] | "Quick Brown Fox Jumps" |
| [1] | "Brown" |
| [2] | "Jumps" |
| index | 4 |
| indices | [[4, 25], [10, 15], [20, 25]] groups: { color: [10, 15 ]} |
| input | "The Quick Brown Fox Jumps Over The Lazy Dog" |
| groups | { color: "Brown" } |
それに加えて、この正規表現がグローバルであるため、 re.lastIndex は 25 に設定されます。
正規表現で g フラグを使用する場合、同じ文字列で成功する一致を見つけるために exec() メソッドを複数回使うことができます。その際、検索は正規表現オブジェクトの lastIndex プロパティで指定された位置の str の部分文字列から始まります(test() も lastIndex プロパティの位置から始めます)。なお、別な文字列を検索する場合でも lastIndex プロパティはリセットされず、既存の lastIndex から検索を始めます。
例えば、次のスクリプトを考えてみてください。
このスクリプトは以下のテキストを表示します。
abb を見つけました。次の照合は 3 からです。 ab を見つけました。次の照合は 9 からです。警告: 無限ループに陥る落とし穴がたくさんあります。
通常、このようなコードを String.prototype.matchAll() で置き換えることで、エラーの可能性を下げることができます。
RegExp オブジェクトを作成せずに exec() を使用することもできます。
これで 'hello world!' を含んだメッセージをログ出力します。
| ECMAScript® 2027 Language Specification # sec-regexp.prototype.exec |
Enable JavaScript to view this browser compatibility table.
This page was last modified on 2025年11月10日 by MDN contributors.
Your blueprint for a better internet.
Visit Mozilla Corporation’s not-for-profit parent, the Mozilla Foundation.
Portions of this content are ©1998–2026 by individual mozilla.org contributors. Content available under a Creative Commons license.