CreaTools LogoCreaTools
Tips

正規表現チートシート|コピペで使える実務パターン集

2026-03-09

結論:実務で使うのはこの7パターン

正規表現を「理解する」必要はない。 「コピペして動く」が正義。

やりたいことパターン
メールアドレス^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$
電話番号(日本)^0\d{1,4}-?\d{1,4}-?\d{3,4}$
URL^https?:\/\/[\w\-]+(\.[\w\-]+)+[\/\w\-.,@?^=%&:~+#]*$
郵便番号^\d{3}-?\d{4}$
半角英数のみ^[a-zA-Z0-9]+$
日付(YYYY-MM-DD)^\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\d|3[01])$
HTMLタグ除去<[^>]*>

この表をブックマークすれば、毎回ググらなくて済む。


基本記法:これだけ覚える

文字の指定

記法意味
.任意の1文字a.c → abc, a1c, a-c
\d数字(0-9)\d{3} → 123, 456
\w英数字とアンダースコア\w+ → hello_123
\s空白文字\s+ → スペース、タブ
[abc]a, b, c のいずれか[aeiou] → 母音
[^abc]a, b, c 以外[^0-9] → 数字以外

量指定子

記法意味
*0回以上ab*c → ac, abc, abbc
+1回以上ab+c → abc, abbc(ac は不一致)
?0回または1回colou?r → color, colour
{n}ちょうどn回\d{4} → 2026
{n,m}n回以上m回以下\d{2,4} → 12, 123, 1234

位置指定

記法意味
^先頭
$末尾
\b単語の境界
// 「先頭から末尾まで全体が一致」を確認するとき
/^\d{3}-\d{4}$/.test("123-4567"); // true
/^\d{3}-\d{4}$/.test("〒123-4567"); // false(先頭に〒)

実務パターン詳細

メールアドレス

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

emailRegex.test("user@example.com");     // true
emailRegex.test("user@example");          // false
emailRegex.test("user@.com");             // false

⚠️ RFC 5322 準拠の完全なバリデーションは正規表現では不可能。フォームの入力チェック用途なら上記で十分。 厳密な検証はサーバーサイドで確認メールを送る。

電話番号(日本)

const phoneRegex = /^0\d{1,4}-?\d{1,4}-?\d{3,4}$/;

phoneRegex.test("03-1234-5678");    // true
phoneRegex.test("090-1234-5678");   // true
phoneRegex.test("09012345678");     // true(ハイフンなし)
phoneRegex.test("1234-5678");       // false(先頭0なし)

URL

const urlRegex = /^https?:\/\/[\w\-]+(\.[\w\-]+)+[\/\w\-.,@?^=%&:~+#]*$/;

urlRegex.test("https://example.com");           // true
urlRegex.test("http://example.com/path?q=1");   // true
urlRegex.test("ftp://example.com");              // false(httpのみ)

郵便番号

const zipRegex = /^\d{3}-?\d{4}$/;

zipRegex.test("123-4567");  // true
zipRegex.test("1234567");   // true
zipRegex.test("123-456");   // false

JavaScript での使い方

test:一致するか確認

const regex = /^\d+$/;
regex.test("123");   // true
regex.test("abc");   // false

match:一致した部分を取得

const text = "電話番号は03-1234-5678です";
const matches = text.match(/\d{2,4}-\d{3,4}-\d{3,4}/);
// matches[0] → "03-1234-5678"

replace:置換

// HTMLタグを除去
const html = "<p>テキスト</p>";
const plain = html.replace(/<[^>]*>/g, "");
// plain → "テキスト"

// 電話番号のハイフンを除去
"03-1234-5678".replace(/-/g, "");
// → "0312345678"

matchAll:複数一致を取得

const text = "price: $100, tax: $10";
const matches = [...text.matchAll(/\$(\d+)/g)];
// matches[0][1] → "100"
// matches[1][1] → "10"

よくあるミス

1. エスケープ忘れ

// ✗ ドットが「任意の1文字」として扱われる
/example.com/

// ✓ ドットをリテラルとして扱う
/example\.com/

エスケープが必要な文字:. * + ? ^ $ { } [ ] ( ) | \ /

2. 貪欲マッチの罠

const html = "<b>太字</b>と<b>強調</b>";

// ✗ 貪欲:最長一致
html.match(/<b>.*<\/b>/);
// → "<b>太字</b>と<b>強調</b>"

// ✓ 非貪欲:最短一致(?を追加)
html.match(/<b>.*?<\/b>/);
// → "<b>太字</b>"

3. グローバルフラグの付け忘れ

// ✗ 最初の1つだけ置換
"aaa".replace(/a/, "b");   // → "baa"

// ✓ 全部置換
"aaa".replace(/a/g, "b");  // → "bbb"

4. 全角文字の扱い

// ✗ \w は全角文字に一致しない
/^\w+$/.test("テスト");  // false

// ✓ Unicode対応
/^[\p{L}\p{N}]+$/u.test("テスト");  // true

日本語を含む場合は \p{L}(Unicode文字)+ u フラグを使う。


フラグ一覧

フラグ意味使う場面
g全体検索replace で全箇所置換
i大文字小文字無視Hellohello も一致させたい
m複数行モード^ $ が各行に適用
sdotAll. が改行にも一致
uUnicode日本語、絵文字を扱う
// 大文字小文字を無視して検索
/hello/i.test("Hello");  // true

// 複数行で各行の先頭を検索
"line1\nline2".match(/^line/gm);
// → ["line", "line"]

入力バリデーションの判断基準

項目正規表現でやるべきか
形式チェック(桁数、文字種)✓ やるべき
メールの存在確認✗ 確認メールを送る
日付の妥当性(2月30日など)✗ Date オブジェクトで検証
パスワード強度△ 長さ・文字種のみ正規表現、総合判断はロジックで
HTML のサニタイズ✗ DOMParser や専用ライブラリを使う

正規表現は「形式が合っているか」の確認だけ。 「正しいか」の検証はロジックで。


まとめ

やりたいこと方法
形式チェックtest()
部分抽出match() / matchAll()
置換replace()
全箇所対象g フラグ
日本語対応u フラグ + \p{L}

正規表現は覚えなくていい。このページをブックマークして、必要なときにコピペする。


関連記事