JavaScriptの正規表現|フォーマットチェックやmatchなど実務で使える正規表現一覧のカバー画像
スキル

JavaScriptの正規表現|フォーマットチェックやmatchなど実務で使える正規表現一覧

公開日:2025/02/19最終更新日:2025/02/19

JavaScriptの正規表現は、テキストデータの検索・置換・抽出を強力にサポートする機能です。例えばフォーム入力のバリデーション・ログデータの解析・スクレイピング・ログファイルのフィルタリングなど、さまざまな場面で使われます。


しかし、記号が多く難解に見えがちで、慣れていないと「どこが間違っているのか分からない」「意図しない結果になる」といった壁にぶつかることが多いのも事実です。


本記事では、JavaScriptの正規表現を基礎から応用まで徹底的に解説し、特に実務で使えるパターンについて詳しく紹介します。

1.正規表現の基本構文と使い方

JavaScriptの正規表現は、テキストの検索や置換、フォーマットの検証など多くの場面で活用される強力な機能です。しかし、記号が多く直感的に理解しにくいため、正しく使いこなすには基礎からの学習が欠かせません。


本章では、JavaScriptにおける正規表現の基本構文と使い方について詳しく解説します。

正規表現の基本構造

JavaScriptで正規表現を扱う方法は2つあります。

リテラル表記

一番シンプルな書き方です。リテラル表記のメリットは、可読性が高く高速であることです。一方でデメリットは動的に生成しづらいことです。

const regex = /pattern/;

RegExpオブジェクトを使用した方法

動的にパターンを生成する場合に便利です。RegExpオブジェクトを使用した方法のメリットは、変数を使えることで、デメリットは可読性が低くなることです。

const regex = new RegExp("pattern");

例えば、変数を使って正規表現を組み立てる場合は、RegExpを使用します。

const searchWord = "apple";

const regex = new RegExp(searchWord, "gi");

console.log("I love Apple and apple pie.".match(regex)); // ["Apple", "apple"]

主要なメタ文字と特殊記号

JavaScriptの正規表現では、メタ文字やエスケープシーケンスを活用することで、より高度な検索が可能になります。

メタ文字

意味

.

任意の1文字

/c.t/ → "cat", "cut"

^

行頭に一致

/^hello/ → "hello world" 〇, "world hello" ✕

$

行末に一致

/world$/ → "hello world" 〇, "world hello" ✕

*

0回以上の繰り返し

/a*/ → "a", "aa", "aaa", ""

+

1回以上の繰り返し

/a+/ → "a", "aa", "aaa"

?

0回 or 1回

/colou?r/ → "color", "colour"

{n,m}

n回以上m回以下

/\d{2,4}/ → "12", "123", "1234"

\d

数字 ([0-9] と同じ)

/\d+/ → "123"

\w

英数字 ([a-zA-Z0-9_])

/\w+/ → "word123"

\s

空白文字

/\s+/ → " "

\b

単語の境界

/\bword\b/ → "word", "word123" ✕

任意の文字列と数字を表すパターン

JavaScriptの正規表現では、任意の文字列や数字を柔軟に検索・抽出するためのパターンを活用することが重要です。特定の文字の組み合わせや、数字のみを対象としたマッチングを行うことで、入力データの検証やテキスト処理を効率化できます。

任意の文字列を表すパターン

任意の1文字を表す .(ドット)は、どんな文字でも1文字にマッチします。

const regex = /c.t/;

console.log("cat".match(regex)); // ["cat"]

console.log("cut".match(regex)); // ["cut"]

console.log("ct".match(regex)); // null (マッチしない)

数字を表すパターン

\dは数字(0~9) にマッチします。

const regex = /\d+/;

console.log("Item123".match(regex)); // ["123"]

console.log("No numbers here!".match(regex)); // null

また、特定の桁数の数字だけを検索したい場合は、{n,m}を活用できます。

const regex = /\d{4}/;

console.log("Year: 2025".match(regex)); // ["2025"]

console.log("Number: 123".match(regex)); // null (3桁なのでマッチしない)

2.JavaScriptでの正規表現の利用方法

JavaScriptで正規表現を活用するには、単にパターンを作成するだけでなく、適切なメソッドを使い分けることが重要です。例えば特定のパターンに一致するかどうかを確認する・該当するすべてのマッチを取得する・特定の文字列を置換するなど目的に応じた適切なメソッドを選ぶことで、効率的なテキスト処理が可能になります。


本章では、JavaScriptの組み込みメソッドと正規表現の連携方法について詳しく解説します。

test()を使ったマッチング

test()は、文字列が正規表現に一致するかを判定します。

const regex = /\d+/;

console.log(regex.test("abc123")); // true

match()を使った検索

match()は、正規表現に一致する部分を取得します。

const regex = /\d+/g;

console.log("123 abc 456".match(regex)); // ["123", "456"]

replace()を使った置換

replace()を使えば、特定のパターンを別の文字列に置換できます。

const text = "Hello 123!";

console.log(text.replace(/\d+/, "###")); // "Hello ###!"

正規表現オプションの活用(g・i・mなど)

JavaScriptの正規表現には、フラグ(オプション) を指定することで、検索の挙動を柔軟に変更することができます。フラグを適切に活用することで、より高度な検索や置換が可能になります。ここでは、代表的なフラグである g(グローバル検索)・i(大文字・小文字を区別しない)・m(複数行モード)について詳しく解説します。

g(グローバル検索)

通常、match()やreplace()などのメソッドを使うと、最初に一致したものだけが対象になります。しかしgフラグを追加すると、文字列全体を検索し、一致するすべての部分を取得できます。

const text = "apple banana apple";

const regex = /apple/;

console.log(text.match(regex)); // ["apple"](最初の1つのみ)


const regexGlobal = /apple/g;

console.log(text.match(regexGlobal)); // ["apple", "apple"](すべて取得)

i(大文字・小文字を区別しない)

デフォルトでは、正規表現は大文字・小文字を区別します。しかし、iフラグを追加すると、大文字・小文字を無視して検索できます。

const text = "JavaScript is amazing. javascript is powerful.";

const regex = /javascript/;

console.log(text.match(regex)); // ["javascript"](1つ目はマッチしない)


const regexIgnoreCase = /javascript/i;

console.log(text.match(regexIgnoreCase)); // ["JavaScript"](大文字・小文字を区別しない)


const regexGlobalIgnoreCase = /javascript/gi;

console.log(text.match(regexGlobalIgnoreCase)); // ["JavaScript", "javascript"](両方取得)

m(複数行モード)

通常、^(行頭)と$(行末)は、文字列全体の先頭と末尾にマッチします。しかし、mフラグを追加すると、各行の先頭と末尾にマッチするようになります。

const text = `Hello world

JavaScript is great

Regex is powerful`;


const regexWithoutM = /^JavaScript/;

console.log(text.match(regexWithoutM)); // null(最初の行の先頭にないためマッチしない)


const regexWithM = /^JavaScript/m;

console.log(text.match(regexWithM)); // ["JavaScript"](複数行モードで2行目の先頭にマッチ)

3.正規表現の応用テクニック

ここでは、JavaScriptの正規表現をより実践的に活用するためのテクニックを詳しく解説します。基本の使い方をマスターしたら、「キャプチャグループ」「ネストした正規表現」「動的な正規表現」などを駆使して、より高度なパターンマッチングを実装できます。

キャプチャグループと参照

キャプチャグループ()を使うと、正規表現の一部をグループ化し、マッチした部分を取得できます。また、マッチした部分は$1,$2,$3などのバックリファレンスとして利用できます。

キャプチャグループの基本

const regex = /(\d{4})-(\d{2})-(\d{2})/;

const result = "2025-02-11".match(regex);

console.log(result[1]); // "2025"

console.log(result[2]); // "02"

console.log(result[3]); // "11"

この例では、(\d{4})が年、(\d{2})が月、(\d{2})が日をキャプチャしています。

キャプチャグループを使った置換

バックリファレンスを利用すると、置換の際に元の値を保持したままフォーマットを変更できます。

const date = "2025-02-11";

const reformattedDate = date.replace(/(\d{4})-(\d{2})-(\d{2})/, "$3/$2/$1");

console.log(reformattedDate); // "11/02/2025"

非キャプチャグループ

キャプチャグループは便利ですが、バックリファレンスが不要な場合は、非キャプチャグループ(?:...)を使うことでパフォーマンスを向上できます。

const regex = /(?:https?|ftp):\/\/[^\s]+/;

console.log("Visit https://example.com".match(regex)); // ["https://example.com"]

ここで、(?:https?|ftp)の?:により、httpsやftpをキャプチャしません。

ネストした正規表現

複雑なデータの解析では、複数の条件を組み合わせたネストした正規表現が必要になります。

HTMLタグの抽出

const regex = /<(\w+)[^>]*>(.*?)<\/\1>/g;

const html = "<div>Hello</div><span>World</span>";

console.log(html.match(regex)); // ["<div>Hello</div>", "<span>World</span>"]

この正規表現では、タグ名をキャプチャし、それと一致する閉じタグがあるかを確認しています。

JSONデータから特定の値を抽出

const json = '{"name": "John", "age": 30, "city": "New York"}';

const regex = /"name":\s*"([^"]+)"/;

console.log(json.match(regex)[1]); // "John"

この正規表現は、"name"に対応する値("John")を取得します。

動的な正規表現

RegExpコンストラクタを使えば、変数を組み込んだ正規表現を動的に生成できます。

const keyword = "apple";

const regex = new RegExp(`\\b${keyword}\\b`, "gi");

console.log("I love Apple and apple pie.".match(regex)); // ["Apple", "apple"]

\\bを使うことで、完全一致する単語のみを取得しています。

4.実践!よく使う正規表現パターン集

正規表現は、単純な文字列検索からデータの検証・フォーマット変換・抽出まで、幅広い場面で利用されます。

ここでは、実務で頻繁に使うパターンを具体的なコード例とともに詳しく解説します。

メールアドレスのバリデーション

メールアドレスの形式をチェックする際に使われる正規表現です。

const emailRegex = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/;

console.log(emailRegex.test("test@example.com")); // true

console.log(emailRegex.test("invalid-email")); // false

URLの抽出とバリデーション

WebページやテキストからURLを抽出したい場合、以下の正規表現を使用できます。

const urlRegex = /https?:\/\/[^\s]+/g;

const text = "Visit https://example.com and http://test.org for details.";

console.log(text.match(urlRegex)); 

// ["https://example.com", "http://test.org"]

この正規表現はhttpまたはhttpsで始まり、その後の文字列([^\s]+)をURLとして取得します。

電話番号のフォーマットチェック

電話番号のフォーマットをチェックしたい場合、以下の正規表現を使用できます。

const phoneRegex = /^\d{2,4}-\d{2,4}-\d{4}$/;

console.log(phoneRegex.test("03-1234-5678")); // true

console.log(phoneRegex.test("090-123-456")); // false

  • 市外局番\d{2,4}

  • 中間\d{2,4}

  • 下4桁\d{4}

  • それぞれ-で区切る


関連記事

JavaScriptライブラリとは?おすすめの使い方や導入方法などわかりやすく解説


JavaScriptフレームワーク徹底解説【2025年版】

5.まとめ

本記事では、JavaScriptの正規表現(RegExp)について、基礎から応用、実践的な使い方まで詳しく解説しました。正規表現は、テキストの検索・置換・データの抽出など、さまざまな場面で活用できる強力なツールですが、記号が多く直感的に理解しづらいため、適切な学習と実践が欠かせません。


正規表現をマスターすれば、コードの効率化やデータ処理の自動化につながります。本記事で学んだ内容を活用し、より実践的なスキルを磨いていきましょう。


本記事が皆様にとって少しでもお役に立てますと幸いです。

この記事に関連するタグ

JavaScript
開発

無料で登録したらスカウトを待つだけ フリーランスの新しい仕事探しを始めよう

関連記事をあわせて読みませんか?

JavaScriptのalert完全ガイド|自動で閉じる方法や非推奨理由、alert以外の方法を紹介のカバー画像

JavaScriptのalert()はなぜ非推奨?より良い通知方法を解説。モダンなWeb開発で役立つ知識を習得しよう。

Nuxt.jsとは【入門】Next.jsとの違いやドキュメント基準のインストール方法、書き方を解説のカバー画像

Nuxt.jsとは?Vue.jsベースの高速でSEOに強いフレームワーク。導入方法から開発までを解説。Web開発の効率化に!

Angularとは?人気ないの?入門のための学習ステップや将来性など解説のカバー画像

Angularとは何か?大規模開発で選ばれるフレームワークの特徴を解説。

JavaScript初心者向け【サンプルコード付】基礎から学習するための方法を解説のカバー画像

JavaScript初心者向け!Webサイトに動きをつけよう。基礎文法からDOM操作、イベントハンドリングまでわかりやすく解説。サンプルコード付きで実践力UP!

Vue.jsとは?特徴や他フレームワークとの違い、メリット、学習ステップをわかりやすく解説のカバー画像

Vue.jsとは?ReactやAngularとの違いを徹底比較!初心者向けにわかりやすく解説。Vue.jsで作るWebアプリ開発入門。

JavaScriptとは?初心者にもわかりやすく何ができるかや歴史、基本的な文法を解説のカバー画像

JavaScriptとは、Webサイトに動きやインタラクティブな機能を追加するためのプログラミング言語です。本記事では、JavaScriptの基本から応用、そして最新のトレンドまでを網羅し、初心者にもわかりやすく解説します。

スキルの記事をすべて見る>

フルリモート案件を 無料登録した方限定で配信中

JavaScript のフリーランス案件・求人

【Python/TypeScriptNext.js】広報活動DXプロダクト開発案件

145万円/月額
業務委託(フリーランス)

Java/経費精算システム開発案件・求人

70-90万円/月額
業務委託(フリーランス)

JavaScriptのフリーランス案件をすべて見る >

おすすめフリーランス案件・求人

【SAP】製造業向けSAP導入支援案件

125万円/月額
業務委託(フリーランス)

【SAP】 SAP S/4HANA導入案件

110万円/月額
業務委託(フリーランス)

行政機関向けインフラシステムデザイン刷新PJでのPL支援|リモート併用

80-104万円/月額
業務委託(フリーランス)

【AWS】既存決済サービスの基盤刷新支援(ベンダー側SE)|通信業

100-140万円/月額
業務委託(フリーランス)

おすすめフリーランス案件をすべて見る >

新着のフリーランス案件・求人

intra-mart開発案件

60万円/月額
業務委託(フリーランス)

不動産業向け業務システム開発

60万円/月額
業務委託(フリーランス)

Rubyエンジニア募集

70万円/月額
業務委託(フリーランス)

Pythonエンジニア(Webアプリ開発)

80万円/月額
業務委託(フリーランス)

新着のフリーランス案件をすべて見る >

人気の検索条件でフリーランス案件を探す

JavaScript
Java
TypeScript
PHP
AWS
Python
Go言語
Ruby on Rails
Flutter
Kotlin
Swift
React
フルリモート
副業

人気の職種の案件をみる

エンジニア
PM・ディレクター
クリエイター
コンサルタント
デザイナー
マーケター
フロントエンドエンジニア
バックエンドエンジニア
アプリエンジニア
インフラエンジニア
ネットワークエンジニア
データベースエンジニア
セキュリティエンジニア
情報システム
システムエンジニア(SE)
プログラマー(PG)