JavaScriptの正規表現でマッチ結果を取得する方法(match, exec)
先生と生徒の会話形式で理解しよう
生徒
「文字列の中で特定のパターンにマッチする部分を取得したいです。JavaScriptではどうすればいいですか?」
先生
「それなら match メソッドや exec メソッドを使うと便利です。文字列から正規表現にマッチする部分を取り出すことができます。」
生徒
「matchとexec、どちらを使えばいいのか迷います。」
先生
「用途によって使い分けるのがポイントです。それぞれの特徴を見ていきましょう。」
1. matchメソッドでマッチ結果を取得
match メソッドは文字列から正規表現にマッチする部分を配列として取得します。基本の使い方は以下の通りです。
const text = "I have 2 apples and 5 bananas.";
const result = text.match(/\d+/g);
console.log(result); // ["2", "5"]
ここでは \d+ で数字を検索し、g フラグで文字列全体にマッチさせています。結果は配列として返ります。
2. execメソッドで順番にマッチを取得
exec メソッドは正規表現オブジェクトに対して使い、マッチした最初の部分を返します。g フラグをつけると、次の呼び出しで続きのマッチを取得できます。
const regex = /\d+/g;
let str = "I have 2 apples and 5 bananas.";
let match;
while ((match = regex.exec(str)) !== null) {
console.log(`Found ${match[0]} at index ${match.index}`);
}
// Found 2 at index 7
// Found 5 at index 19
配列の 0 番目にマッチ文字列、index プロパティに位置情報が入っています。
3. matchとexecの使い分け
- match: 文字列全体から配列でマッチを取得したいときに便利
- exec: マッチごとの位置情報も含めて順番に取得したいときに便利
例えば文章内で複数の数字や特定の単語を探し、位置を知りたい場合は exec が役立ちます。
4. matchでキャプチャグループを使う
正規表現でグループ化した部分を取得したいときも match が便利です。
const date = "2025-12-11";
const match = date.match(/(\d{4})-(\d{2})-(\d{2})/);
console.log(match[0]); // "2025-12-11"
console.log(match[1]); // "2025"
console.log(match[2]); // "12"
console.log(match[3]); // "11"
括弧で囲った部分がキャプチャグループとして取得でき、年・月・日などを簡単に取り出せます。
5. 正規表現でマッチ結果を扱うポイント
- マッチ結果は配列やオブジェクトとして返るので、インデックスで必要な部分を取得できる
- フラグ
gは全体検索、iは大文字小文字無視 - execは繰り返し呼び出すと次のマッチを取得できる
- キャプチャグループを使うと、部分的に文字列を取り出すのが簡単
- 最初は簡単なパターンで練習してから複雑な正規表現に挑戦する
6. 注意点
正規表現は便利ですが、複雑になりすぎると読みにくくなります。特に exec は状態を持つので、繰り返し処理で前回の結果に注意する必要があります。まずは基本を押さえて、徐々に応用していくと理解しやすいです。