Get to know MDN better
このページはコミュニティーの尽力で英語から翻訳されました。MDN Web Docs コミュニティーについてもっと知り、仲間になるにはこちらから。
この機能は広く実装されており、多くのバージョンの端末やブラウザーで動作します。2020年1月以降、すべてのブラウザーで利用可能です。
matchAll() は String 値のメソッドで、この文字列と正規表現を照合したすべての結果を、キャプチャグループを含み、イテレーターで返すメソッドです。
正規表現オブジェクト、または Symbol.matchAll を持つ任意のオブジェクトです。
regexp が RegExp 以外のオブジェクトであった場合、暗黙的に RegExp への変換が new RegExp(regexp, 'g') を使用して行われます。
regexp が正規表現である場合、グローバルフラグ (g) が設定されます。そうでなければ TypeError が発生します。
一致したものの反復可能なイテレーターオブジェクト(再起動不可能なもの)、または一致するものがなければ空のイテレーターです。イテレーターが生成するそれぞれの値は、RegExp.prototype.exec() の返値と同じ形です。
regexp が正規表現である場合で、グローバルフラグ (g) が設定されていない場合(flags プロパティに "g" が含まれていない場合)。
String.prototype.matchAll の実装は、引数に対応する Symbol.matchAll メソッドを、最初の引数として文字列を指定して呼び出すだけです(正規表現がグローバルであるかどうかを検証する部分を除く)。実際の実装は RegExp.prototype[Symbol.matchAll]() から来ています。
matchAll() が JavaScript に追加される前は、 regexp.exec(および /g フラグ付きの正規表現)をループの中で呼び出すことですべての一致結果を取得することができました。
matchAll() が使えるようになったことで、 while によるループと、g 付きの exec を避けることができます。代わりにイテレーターが取得できるので、for...of、配列スプレッド、Array.from() 構造と効率よく組み合わせることができます。
matchAll は、グローバル (g) フラグがない場合は例外が発生します。
matchAll では内部的に regexp の複製を作成します。そのため regexp.exec() とは違って文字列をスキャンした際に lastIndex が変わることはありません。
しかし、これは regexp.exec() をループ内で使うのとは異なり、正規表現を進めたり戻したりするために lastIndex を変更することができないことを意味します。
matchAll はキャプチャグループへのよりよいアクセスを実現します。
match() では、グローバル g フラグを使用するとキャプチャグループが無視されてしまいます。
matchAll を使えば簡単にキャプチャグループにアクセスできます。
オブジェクトに Symbol.matchAll メソッドがあれば、それをカスタムマッチャーとして使うことができます。Symbol.matchAll の返値は matchAll() の返値となる。
| ECMAScript® 2027 Language Specification # sec-string.prototype.matchall |
ブラウザー互換性一覧表を表示するには、JavaScript を有効にしてください。
より良いインターネットのための青写真。
このコンテンツの一部は、©1998–2026 個人の mozilla.org 協力者です。コンテンツはクリエイティブ・コモンズ・ライセンスのもとで利用できます。