String.prototype.matchAll() は、指定された正規表現と一致するすべてのマッチを含むイテレータを返すメソッドです。このメソッドは、文字列内のすべてのマッチを検索するために使用されます[1]

構文

編集
str.matchAll(regexp)
  • regexp: 文字列に対して使用する正規表現オブジェクト。g フラグが設定されていない場合、TypeError が発生します。

基本的な使用法

編集

以下のプログラムは、String.prototype.matchAll() を使用して文字列内のすべてのマッチを検索します。

const str = 'test1test2test3';
const regexp = /test\d/g;
const matches = [...str.matchAll(regexp)];

console.log(matches[0]); // ['test1', index: 0, input: 'test1test2test3', groups: undefined]
console.log(matches[1]); // ['test2', index: 5, input: 'test1test2test3', groups: undefined]
console.log(matches[2]); // ['test3', index: 10, input: 'test1test2test3', groups: undefined]

このプログラムでは、String.prototype.matchAll() を使用して文字列内のすべての「test」という単語と後続の数字を検索しています。返されたイテレータから配列に変換し、各マッチの結果を表示しています。

キャプチャグループを使った例

編集

以下のプログラムは、キャプチャグループを使用して String.prototype.matchAll() の結果からより詳細な情報を取得します。

const str = 'black_1 white_2 red_3';
const regexp = /(\w+)_(\d+)/g;
const matches = [...str.matchAll(regexp)];

for (const match of matches) {
  console.log(`完全なマッチ: ${match[0]}`);
  console.log(`第1キャプチャグループ: ${match[1]}`);
  console.log(`第2キャプチャグループ: ${match[2]}`);
  console.log('---');
}
// 出力:
// 完全なマッチ: black_1
// 第1キャプチャグループ: black
// 第2キャプチャグループ: 1
// ---
// 完全なマッチ: white_2
// 第1キャプチャグループ: white
// 第2キャプチャグループ: 2
// ---
// 完全なマッチ: red_3
// 第1キャプチャグループ: red
// 第2キャプチャグループ: 3
// ---

このプログラムでは、キャプチャグループを使用して色の名前と数字を別々に取得しています。matchAll() メソッドは、各マッチに対してキャプチャグループの情報を含む配列を返します。

注意点

編集
  • イテレータ: matchAll() メソッドは配列ではなくイテレータを返します。必要に応じて配列に変換するには、スプレッド構文([...iterator])または Array.from() を使用します。
  • グローバルフラグ: 正規表現には g フラグが必要です。設定されていない場合、TypeError が発生します。
  • 非破壊的: matchAll() は、String.prototype.match() と異なり、元の正規表現のオブジェクトの lastIndex プロパティを変更しません。
  • マッチなし: マッチが見つからない場合、空のイテレータが返されます。

脚註

編集
  1. ^ これは、文字列に対して正規表現によるすべてのマッチを取得するために使用されます。

外部リンク

編集