【2026年8月最新】JavaScriptのmatchメソッドの使い方と正規表現の基礎|初心者向けにやさしく解説
この記事の内容
「JavaScriptのmatchメソッドって結局どう使えばいいの?」「gを付けると付けないでなぜ結果が変わるの?」——検索でこの記事にたどり着いたあなたは、おそらくそうした疑問を抱えているはずです。
match() は、文字列の中から正規表現のパターンに一致する部分を取り出すJavaScriptの標準メソッドです。一見シンプルなのですが、グローバルフラグ(gフラグ)の有無で戻り値の形がまったく別物になるという落とし穴があり、ここでつまずくエンジニアは少なくありません。
この記事では、match()の基本的な使い方から、gフラグによる挙動の違い、キャプチャグループの扱い、null が返るケース、そして似た名前のmatchAll()との違いまでを、実際に動くコード例で整理します。加えて後半では、「正規表現を自分で書けない非エンジニアの経営者は、この技術とどう付き合えばいいのか」という弊社(株式会社GENAI)ならではの視点も紹介します。
この記事を最後まで読むと、次の7つが明確になります。
01 REGEX BASICS そもそも「正規表現」とは何か プログラミング未経験でも理解できるたとえ話から
正規表現(Regular Expression、略してregex)とは、文字列の中から「こういうパターンの部分」を探し出すための、いわば検索条件の書き方のルールです。
📚 用語解説
正規表現(Regular Expression):「特定のパターンに一致する文字列」を表現するための記号のルール。例えば「数字が4桁続く部分」「@マークを含むメールアドレスらしき部分」のような、あいまいな条件を機械的に検索できるようにする仕組みです。JavaScriptでは /パターン/ という形(スラッシュで囲む書き方)で記述します。
たとえるなら、正規表現は「Excelのオートフィルタで使う検索条件」を、もっと細かく指定できるようにしたものだとイメージすると分かりやすいです。「◯◯を含む」だけでなく、「数字4桁-数字2桁-数字2桁の形式(日付らしきもの)」「@の前後に文字が続くメールアドレスらしきもの」のような、条件付きの検索が可能になります。
正規表現は独特の記号が並ぶため、最初は「暗号のようで読めない」と感じるのが普通です。この記事では実際によく使うパターンの意味を都度解説していきますが、非エンジニアの方は「こういうことができる」という全体像だけ掴めれば十分です。細部の記述は後述する通りAIに任せることもできます。
02 BASIC SYNTAX matchメソッドの基本構文 文字列に対して正規表現パターンを実行する2つの書き方
String.prototype.match() は、文字列(String)のメソッドとして呼び出します。「対象の文字列.match(正規表現パターン)」という順序で書く点が、最初に押さえておきたいポイントです。
2-1. 正規表現リテラルで直接指定する方法
もっとも一般的な書き方は、スラッシュで正規表現を直接書く「正規表現リテラル」を使う方法です。
例: メールアドレスらしき部分を1件抜き出す
const str = "お問い合わせは info@genai-ai.co.jp までお願いします。";
const result = str.match(/[\w.-]+@[\w.-]+\.[A-Za-z]{2,}/);
console.log(result[0]); // "info@genai-ai.co.jp"
📚 用語解説
正規表現リテラル:コード中に /パターン/フラグ という形で直接書く正規表現の記法。JavaScriptでは文字列と同じ感覚で「/」で囲んで書きます。実行時に評価されるため、パターンが固定であればこちらが基本の書き方になります。
2-2. RegExpオブジェクトを使う方法
パターンを変数として扱いたい場合や、文字列から動的にパターンを組み立てたい場合は、RegExpオブジェクトを使う書き方もできます。
例: 検索ワードをユーザー入力などから動的に組み立てる場合
const keyword = "genai-ai\\.co\\.jp"; // ドットはエスケープしておく
const pattern = new RegExp(keyword, "i"); // "i" = 大文字小文字を区別しない
const str = "問い合わせ先: info@GENAI-AI.CO.JP";
console.log(str.match(pattern)[0]); // "GENAI-AI.CO.JP"
📚 用語解説
RegExpオブジェクト:new RegExp("パターン", "フラグ") という形で正規表現を生成する書き方。パターンを文字列(変数)として組み立てられるため、ユーザーの入力値をもとに検索条件を動的に作りたい場合に向いています。ただし文字列の中でバックスラッシュ(\\)を書く際は二重にエスケープする必要がある点に注意が必要です。
/pattern/ で書くのが基本new RegExp() を使うmatch() に文字列をそのまま渡した場合も、内部的には自動でRegExpに変換される仕様new RegExp(文字列) として扱われる仕様になっていますが、意図せず特殊文字(. や ( など)が正規表現の記号として解釈されてしまう事故につながるため、業務コードでは明示的に正規表現として書くことをおすすめします。03 RETURN VALUE 戻り値を正しく理解する gフラグの有無で戻り値の中身がまったく別物になる
match()を使ううえで最も誤解されやすいポイントが、正規表現にグローバルフラグ(gフラグ)を付けるかどうかで、戻り値の構造が大きく変わるという仕様です。
📚 用語解説
グローバルフラグ(gフラグ):正規表現の末尾に付ける /pattern/g の「g」のこと。「最初の1件だけでなく、文字列内に一致する箇所をすべて探す」という指示になります。有無によってmatch()の戻り値の形が変わるため、意図して付ける・付けないを判断する必要があります。
3-1. gフラグなし:詳細情報付きの1件だけ
gフラグを付けない場合、match()は最初に見つかった1件について、詳細情報を含む配列風のオブジェクトを返します。
gフラグなし: 1件だけだが、キャプチャグループ・index・inputまで取得できる
const str = "受付日: 2026-08-01 に承りました。";
const result = str.match(/(\d{4})-(\d{2})-(\d{2})/);
console.log(result[0]); // "2026-08-01"(マッチした全体)
console.log(result[1]); // "2026"(1番目のキャプチャグループ)
console.log(result[2]); // "08"(2番目のキャプチャグループ)
console.log(result[3]); // "01"(3番目のキャプチャグループ)
console.log(result.index); // 5(マッチが始まる文字位置)
console.log(result.input); // 元の文字列全体
📚 用語解説
キャプチャグループ:正規表現のパターンの中で ( ) で囲んだ部分のこと。マッチした文字列の中から「その部分だけ」を個別に取り出せるようにする仕組みです。例えば日付のパターンで年・月・日をそれぞれ括弧で囲むと、マッチ結果の[1]・[2]・[3]にそれぞれの値が入ります。
3-2. gフラグあり:一致した文字列だけを全件
一方、gフラグを付けた場合は、一致した文字列すべてを配列として返しますが、キャプチャグループ・index・inputの情報は失われます。これが最も見落とされやすい仕様です。
gフラグあり: 全件取得できるが、キャプチャグループの中身は取得できない
const str = "受付日: 2026-08-01 対応日: 2026-08-05";
const result = str.match(/(\d{4})-(\d{2})-(\d{2})/g);
console.log(result);
// ["2026-08-01", "2026-08-05"]
// ↑ 一致した文字列全体の配列のみ。年月日ごとの分解や index は取れない
「複数件まとめて取りたい」からとgフラグを付けると、キャプチャグループごとの分解データが取れなくなります。「複数件」かつ「グループごとの分解データ」の両方が必要な場合は、後述するmatchAll()を使う必要があります。この仕様の違いを知らずに実装すると、「なぜか2件目からキャプチャグループが取れない」という不具合につながりがちです。
を実行
正規表現の末尾を確認
index/input/
グループ情報つき
一致文字列のみ
グループ情報なし
04 NULL HANDLING マッチしなかったときの挙動 一致する部分が無いとnullが返る。ここを見落とすとエラーになる
match()は、パターンに一致する部分が文字列内に1件も見つからなかった場合、gフラグの有無にかかわらずnullを返します。空の配列ではなくnullである点が重要です。
マッチしない場合はnullが返る(空配列ではない)
const str = "本文には数字が含まれていません。";
const result = str.match(/\d+/);
console.log(result); // null
// ここで result[0] にアクセスしようとすると...
console.log(result[0]); // TypeError: Cannot read properties of null
match()の結果を確認せずにいきなりresult[0]のようにアクセスすると、一致する部分が無かった場合にTypeErrorで処理が止まります。業務で使う場合は必ず、以下のように結果がnullでないかを先に確認する書き方にする必要があります。
安全な書き方: 先にnullチェックを行う
const result = str.match(/\d+/);
if (result) {
console.log("見つかった:", result[0]);
} else {
console.log("該当する数字は見つかりませんでした");
}
非エンジニアの方がAIに正規表現の実装を頼んだ際、出てきたコードにif (result)のような分岐が入っているかを確認するだけでも、「一致しなかった場合のケアがされているか」の目安になります。この一文が抜けていると、入力データによっては本番で急にエラーが出る可能性があります。
05 MATCHALL matchAll()との違いと使い分け 「全件」かつ「キャプチャグループ」を両方ほしいときの解決策
前章で触れた「gフラグを付けるとキャプチャグループが消える」という制約を解決するのがmatchAll()です。ES2020で追加された比較的新しいメソッドで、一致した箇所すべてについて、キャプチャグループ込みの詳細情報を取得できます。
📚 用語解説
matchAll():文字列内で正規表現に一致するすべての箇所について、それぞれキャプチャグループ・index・inputまで含んだ詳細情報を返すメソッド。match()にgフラグを付けた場合と違い、グループごとの分解データを保ったまま複数件取得できます。戻り値は配列ではなくイテレータと呼ばれる形式で返るため、そのままでは扱いにくく、多くの場合スプレッド構文([...str.matchAll(pattern)])などで配列に変換して使います。
matchAll: 全件かつキャプチャグループの分解データも同時に取れる
const str = "受付日: 2026-08-01 対応日: 2026-08-05";
const pattern = /(\d{4})-(\d{2})-(\d{2})/g;
const matches = [...str.matchAll(pattern)];
matches.forEach((m) => {
console.log(`全体: ${m[0]} / 年: ${m[1]} / 月: ${m[2]} / 日: ${m[3]}`);
});
// 全体: 2026-08-01 / 年: 2026 / 月: 08 / 日: 01
// 全体: 2026-08-05 / 年: 2026 / 月: 08 / 日: 05
matchAll()は、渡す正規表現にgフラグが付いていないとエラーになる仕様です(gフラグなしの正規表現を渡すと例外が発生します)。matchAll()を使う際は、必ずパターンの末尾に g を付けるようにしてください。
| 観点 | match()(gなし) | match()(gあり) | matchAll() |
|---|---|---|---|
| 一致件数 | 最初の1件のみ | すべて(文字列の配列) | すべて(詳細情報つき) |
| キャプチャグループ | 取得できる | 取得できない | 取得できる |
| index / input | 取得できる | 取得できない | 取得できる(各要素ごと) |
| 戻り値の型 | 配列風オブジェクト(一致なしはnull) | 文字列の配列(一致なしはnull) | イテレータ(配列化にはスプレッド構文等が必要) |
| 必要なフラグ | 任意 | 任意(gの有無で挙動変化) | gフラグが必須 |
「1件だけでいい」ならgフラグなしのmatch()、「一致箇所ごとに年・月・日のような分解データがほしい、かつ複数件ある」ならmatchAll()を選ぶ、という整理をしておくと迷いにくくなります。「複数件の一致文字列だけ分かればよい(分解は不要)」という場合は、gフラグ付きのmatch()で十分です。
06 RELATED METHODS test・search・replaceとの違い 正規表現を使う関連メソッドを目的別に整理する
match()以外にも、正規表現を使う代表的なメソッドがいくつかあります。「一致するかどうかだけ知りたい」「一致した部分を別の文字列に置き換えたい」など、目的によって使うメソッドが変わります。
| メソッド | 呼び出し方 | 主な用途 | 戻り値 |
|---|---|---|---|
| match() | 文字列.match(パターン) | 一致した文字列そのものを取り出したい | 配列風オブジェクト or null |
| matchAll() | 文字列.matchAll(パターン) | 複数件を分解データつきで取り出したい | イテレータ |
| test() | パターン.test(文字列) | 一致するかどうかの判定だけしたい | true / false |
| search() | 文字列.search(パターン) | 最初に一致した位置(インデックス)を知りたい | 数値(見つからない場合は-1) |
| replace() | 文字列.replace(パターン, 置換文字列) | 一致した部分を別の文字列に置き換えたい | 置換後の新しい文字列 |
例えば「入力されたメールアドレスの形式が正しいかどうかだけ確認したい」という場面では、実際のマッチ文字列は不要なのでtest()の方がシンプルです。
例: フォームのメールアドレス形式チェックにはtest()が向いている
const pattern = /^[\w.-]+@[\w.-]+\.[A-Za-z]{2,}$/;
console.log(pattern.test("info@genai-ai.co.jp")); // true
console.log(pattern.test("これはメールではない")); // false
07 COMMON PITFALLS よくあるつまずきポイント 特殊文字のエスケープなど、初心者が引っかかりやすい部分
正規表現には、特殊な意味を持つ記号(メタ文字)があります。これらをそのまま「普通の文字」として検索したい場合は、エスケープという処理が必要です。
📚 用語解説
エスケープ処理:正規表現の中で特別な意味を持つ記号(. * + ? ( ) [ ] { } ^ $ | など)を、「特殊な意味ではなくただの文字として扱いたい」ときに、直前にバックスラッシュ(\\)を付ける処理のこと。例えば「.」はそのままだと「任意の1文字」を意味しますが、\\.と書くと「ピリオドそのもの」を意味するようになります。
特にドメイン名やバージョン番号など、ピリオド(.)を含む文字列を検索する際にこのエスケープを忘れると、意図しない範囲まで一致してしまうことがあります。
ピリオドのエスケープ忘れによる誤判定の例
// 意図: "genai-ai.co.jp" という文字列そのものを探したい
// NG例: ピリオドをエスケープしていない
const badPattern = /genai-ai.co.jp/;
console.log(badPattern.test("genai-aiXcoXjp")); // true になってしまう(ピリオドが「任意の1文字」扱い)
// OK例: ピリオドをエスケープしている
const goodPattern = /genai-ai\.co\.jp/;
console.log(goodPattern.test("genai-aiXcoXjp")); // false(正しく判定される)
正規表現の記述ミスは、テストデータによってはたまたま正しく動いているように見えてしまうことがあります。特殊文字を含む文字列(メールアドレス・URL・バージョン番号など)を扱う場合は、複数パターンのテストデータで検証してから本番に反映することを推奨します。
もう一つよくあるつまずきが、「貪欲マッチ」と呼ばれる挙動です。正規表現の量指定子(*や+など)は、特に指定がなければ可能な限り長く一致しようとする性質があります。意図より広い範囲が一致してしまう場合は、この挙動が原因であるケースが多く、パターンの調整(あるいは非貪欲マッチの指定)が必要になることがあります。この挙動の細部はケースによって変わるため、実際に使うパターンでテストデータを使って動作確認することをおすすめします。
パターンを
書いてみる
テストデータで
実行してみる
意図しない一致
/不一致を発見
パターンを
修正して再テスト
従来、この「書く→試す→ずれを見つける→直す」というループを、非エンジニアの担当者が自力で回すのはかなりハードルが高いものでした。次の章では、このプロセス自体をAIに任せる場合の実データと考え方を紹介します。
08 GENAI CASE STUDY 【独自データ】GENAI社内でのコード業務AI活用実態 正規表現のようなコード実装業務を、非エンジニア組織はどこまでAIに任せているか
弊社(株式会社GENAI)では、Claude Max 20xプラン(月額$200・約30,000円)を全社契約し、経営・営業・広告・開発・経理・秘書業務まで幅広い業務でClaude Codeを活用しています。正規表現の実装のような「コードを書く」作業も、その一部です。
| 項目 | 内容 |
|---|---|
| 契約プラン | Claude Max 20x(月$200 / 約30,000円) |
| 利用開始 | 2025年後半〜 |
| 社内でコードを書けるメンバー | 実質0〜1名(非エンジニア主体の組織) |
| 正規表現・スクリプト実装の実行者 | Claude Codeが実装・実行を担当 |
弊社のブログ記事の内部リンク調整、フォームの入力チェック、CSV/データの整形処理など、正規表現を使う場面は業務の中に頻繁に登場します。これらは以前であれば「エンジニアに依頼する」か「都度ネットで調べながら書く」しかありませんでしたが、現在はほぼすべて自然言語での指示からClaude Codeが実装・実行まで完結させています。
| 業務領域 | 正規表現が絡む具体例 | 概算の変化(肌感ベース) |
|---|---|---|
| ブログ記事制作 | SEO記事執筆・リライト・内部リンク最適化 | 1本8h → 1本1h |
| 経理 | 請求書の項目抽出・経費仕訳・Freee連携 | 月40h → 月5h |
| 営業 | 顧客リストからの情報抽出・資料の自動生成 | 週20h → 週2h |
| 秘書業務 | 議事録からのタスク抽出・日報生成 | 日2h → 日15分 |
上記は弊社の肌感ベースの概算数値であり、正規表現の実装だけを切り出した数値ではなく、関連業務全体の効率化の目安としてご覧ください。業種・業態・担当者のスキルによって変動します。「完全自動化」ではなく、レビュー・微調整の工程は引き続き発生しています。
09 NON-ENGINEER GUIDE 【独自】正規表現を書けなくても困らない理由 経営者・非エンジニアがこの技術と付き合う、いちばん現実的な方法
ここまで読んで、「gフラグ」「キャプチャグループ」「matchAll」といった仕様を見て、正直「自分には無理そうだ」と感じた経営者・管理職の方も多いと思います。それで問題ありません。この章では、正規表現を自分で書けなくても業務が回る理由と、その具体的な使い方をお伝えします。
9-1. 「文法を覚える」から「目的を伝える」への転換
従来、正規表現を業務で使うには、記号の意味を1つずつ覚えて、実際に手を動かして書く必要がありました。しかし現在は、Claude Codeのようなエージェント型AIに日本語で目的を伝えるだけで、正規表現を含むコードを書いて、その場で実行し、結果まで返してくれます。
例えば、以下のような自然な日本語の指示だけで、正規表現を使った処理が完結します。
ポイントは、「正規表現で書いて」ではなく「やりたいこと」を伝えることです。パターンの記述、gフラグを付けるかどうか、キャプチャグループの設計、null判定の実装——ここまでの章で解説した技術的な判断はすべて、AI側が担当します。
日本語で伝える
「メールだけ
抜き出して」
設計・記述
gフラグ判断
グループ設計
コードを実行
ターミナル操作は
AI側が担当
OK/修正依頼
日本語で
フィードバック
9-2. 経営者が持つべきなのは「文法」ではなく「勘所」
とはいえ、この記事の前半で解説した内容が無駄になるわけではありません。「gフラグを付けると複数件取れるが、キャプチャグループの情報は消える」という勘所を知っているだけで、AIに出す指示の解像度が大きく変わります。
例えば「請求書番号を全部抽出してほしいが、年度と連番を別々に扱いたい」という要望であれば、「gフラグ付きのmatch()では不十分で、matchAll()を使うべきケースだ」と、経営者自身が判断できなくても、「年度と連番を分けて取り出したい」という一言を指示に含めるだけで、AIは適切な実装(matchAll()の利用など)を選んでくれます。
「全部まとめて」ではなく「1件ずつ分けて」/「文字列だけでいい」ではなく「年月日をバラバラに使いたい」/「エラーになってもいいから動かして」ではなく「見つからない場合の挙動も決めてほしい」——この3つを意識するだけで、AIが実装するコードの品質が変わります。
「正規表現、書けなくて大丈夫かな」と思ったら
メールアドレスの抽出、電話番号の表記統一、日付の整形——
こうした細かいコード実装は、日本語の指示だけでClaude Codeに任せられます。
AI鬼管理では、非エンジニアの経営者・管理職が「自社の業務に何を任せられるか」を一緒に設計します。
NEXT STEP
この記事の内容を、あなたのビジネスで
実践してみませんか?
AI活用を自社で回せるようになりたい方へ
AI鬼管理
Claude Code・Cowork導入支援から業務設計・社内浸透まで実践ベースで伴走。「自社で回せる組織」を90日で作る経営者向けトレーニング。
10 CONCLUSION まとめ matchメソッドの仕様理解と、非エンジニアの向き合い方
この記事では、JavaScriptのmatch()メソッドの基本構文から、gフラグによる戻り値の違い、null判定、matchAll()との使い分け、類似メソッドとの比較、そして非エンジニアの経営者がこの技術とどう付き合うべきかまでを整理しました。最後にポイントを振り返ります。
正規表現やmatchメソッドの細かい仕様は、エンジニアであっても常に完璧に暗記しているとは限りません。重要なのは、「何を実現したいか」を明確にできることです。この記事で紹介した勘所を押さえておけば、自分でコードを書く場合も、AIに実装を任せる場合も、両方で役立つはずです。
よくある質問
Q. match()とmatchAll()、結局どちらを使えばいいですか?
A. 「一致した文字列が1件あれば十分」「複数件あっても文字列だけでよい」場合はmatch()で十分です。一方、「複数件あり、かつキャプチャグループで分解したデータ(年・月・日など)が必要」な場合はmatchAll()を使います。迷った場合は、まず欲しい出力の形(1件か複数件か、分解データが必要かどうか)を具体的にイメージしてから選ぶと判断しやすくなります。
Q. match()の結果がnullになるのはどんなときですか?
A. 正規表現のパターンに一致する部分が文字列内に1つも見つからなかった場合、match()はgフラグの有無にかかわらずnullを返します。空の配列ではなくnullが返る点に注意が必要で、この判定を省略してresult[0]のようにアクセスすると、一致しなかった場合にTypeErrorで処理が止まってしまいます。業務コードでは必ずif文などでnullチェックを行うことが推奨されます。
Q. 正規表現の「gフラグ」を付け忘れるとどうなりますか?
A. 文字列内に一致する箇所が複数あっても、gフラグを付けずにmatch()を実行すると、最初に見つかった1件だけが返されます。「複数件あるはずなのに1件しか取れない」という不具合の多くは、このgフラグの付け忘れが原因です。ただし1件だけで十分な用途であれば、あえて付けない書き方でも問題ありません。
Q. キャプチャグループとは具体的に何ですか?
A. 正規表現のパターンの中で括弧( )を使って囲んだ部分のことです。例えば日付のパターンで年・月・日をそれぞれ括弧で囲んでおくと、マッチ結果の配列の中に、年・月・日それぞれの値が個別の要素として格納されます。マッチした文字列全体だけでなく、その一部分だけを個別に取り出したい場合に使う仕組みです。
Q. 正規表現の特殊文字(. や ( など)をそのまま検索したい場合はどうすればいいですか?
A. ピリオドや括弧など、正規表現で特別な意味を持つ記号を「ただの文字」として検索したい場合は、直前にバックスラッシュを付けてエスケープする必要があります。例えばドメイン名の「.」を検索したい場合は「\\.」のように書きます。エスケープを忘れると、意図しない広い範囲まで一致してしまう可能性があるため、複数のテストデータで動作確認することが重要です。
Q. 非エンジニアでも正規表現を使った業務を任せられますか?
A. 任せられます。Claude Codeのようなエージェント型AIを使えば、「この文字列からメールアドレスだけ抜き出して」のように日本語で目的を伝えるだけで、正規表現の設計・実装・実行までを代行してくれます。重要なのは記号の書き方を覚えることではなく、「何を実現したいか」を具体的に言語化できることです。gフラグの有無や分解データの要否といった判断も、要望を具体的に伝えることでAI側が適切に選んでくれます。
Claude Codeで業務自動化を90日で叩き込む
経営者向けの伴走型パーソナルトレーニング
Claude Code を業務に落とし込む
専門研修コース一覧
受講者本人の業務を題材に、「使いこなせる」状態になるまで伴走する研修プログラム。1対1特化型・ハンズオン・法人講座の3コースを展開中。業務特化・実装まで踏み込むタイプのClaude Code研修です。
研修コース一覧を見る →AI鬼管理へのお問い合わせ
この記事を読んで気になった方へ。
AI鬼管理の専門スタッフが、御社に最適な
業務自動化プランを無料でご提案します。




