初心者でも理解できる正規表現の基本パターン10選
【初心者向けまとめ】
「正規表現って難しそう…」と思っていませんか。
実は、基本パターンをいくつか覚えるだけで、メールアドレスのチェックやテキスト検索が
驚くほど簡単になります。
この記事では、初心者でも今日から使える正規表現の基本パターン10選を、
実例つきでわかりやすく紹介します。
正規表現とは
正規表現とは「文字列のパターンを表現する記法」です。
例えば「3桁の数字」や「@を含むメールアドレス」といった条件を、
短いパターンで表現できます。
基本パターン10選
1. 文字をそのまま検索 /
最もシンプルなパターンです。
const text = "こんにちは、世界";
const pattern = /世界/;
console.log(pattern.test(text)); // true
「世界」という文字列がそのまま含まれているかをチェックします。
2. 任意の1文字 .
ドット . は改行以外の任意の1文字にマッチします。
const pattern = /猫.好き/;
console.log(pattern.test("猫が好き")); // true
console.log(pattern.test("猫も好き")); // true
console.log(pattern.test("猫好き")); // false
「猫」と「好き」の間に何か1文字があればマッチします。
3. 繰り返し * + ?
文字の繰り返しを表現できます。
-
*は0回以上の繰り返し -
+は1回以上の繰り返し -
?は0回または1回
// * の例
const pattern1 = /あ*い/;
console.log(pattern1.test("い")); // true (あが0回)
console.log(pattern1.test("あい")); // true (あが1回)
console.log(pattern1.test("あああい")); // true (あが3回)
// + の例
const pattern2 = /あ+い/;
console.log(pattern2.test("い")); // false (あが0回)
console.log(pattern2.test("あい")); // true (あが1回)
// ? の例
const pattern3 = /あ?い/;
console.log(pattern3.test("い")); // true (あが0回)
console.log(pattern3.test("あい")); // true (あが1回)
console.log(pattern3.test("ああい")); // false (あが2回)
4. 数字 \d と非数字 \D
-
\dは数字1文字 (0-9) -
\Dは数字以外の1文字
// 数字
const pattern1 = /\d\d\d/;
console.log(pattern1.test("abc123")); // true (123にマッチ)
console.log(pattern1.test("abc12")); // false (2桁しかない)
// 非数字
const pattern2 = /\D\D\D/;
console.log(pattern2.test("abc123")); // true (abcにマッチ)
console.log(pattern2.test("ab123")); // false (2文字しかない)
電話番号や郵便番号のチェックに便利です。
※\dは環境によっては全角数字にもマッチすることがあります。
半角数字のみを対象にする場合は[0-9]を使用してください。
5. 繰り返し回数の指定 {n} {n,m}
-
{n}はちょうどn回 -
{n,m}はn回以上m回以下 -
{n,}はn回以上
// 郵便番号 (7桁の数字)
const zipcode = /\d{7}/;
console.log(zipcode.test("1234567")); // true
console.log(zipcode.test("123456")); // false
// 電話番号 (10桁または11桁)
const phone = /\d{10,11}/;
console.log(phone.test("09012345678")); // true (11桁)
console.log(phone.test("0312345678")); // true (10桁)
6. 文字の選択 []
角括弧の中に入れた文字のいずれか1文字にマッチします。
// 母音のチェック(英字)
const pattern1 = /[aeiou]/;
console.log(pattern1.test("apple")); // true
console.log(pattern1.test("xyz")); // false
// 数字0-5のチェック
const pattern2 = /[0-5]/;
console.log(pattern2.test("3")); // true
console.log(pattern2.test("7")); // false
// ひらがなのあ行
const pattern3 = /[あいうえお]/;
console.log(pattern3.test("あめ")); // true
console.log(pattern3.test("かき")); // false
7. 否定 [^]
[^] は括弧内の文字以外にマッチします。
// 数字以外
const pattern = /[^0-9]/;
console.log(pattern.test("123")); // false (全て数字)
console.log(pattern.test("12a34")); // true (aが含まれる)
8. 行の先頭 ^ と末尾 $
-
^は行の先頭 -
$は行の末尾
// 行頭がhttpで始まるかチェック
const pattern1 = /^http/;
console.log(pattern1.test("https://example.com")); // true
console.log(pattern1.test("example.com")); // false
// 行末が.comで終わるかチェック
const pattern2 = /\.com$/;
console.log(pattern2.test("example.com")); // true
console.log(pattern2.test("example.co.jp")); // false
※注意点として、^ は [] の外では「行頭」、中では「否定」を意味します。
9. 単語の境界 \b
単語の境界(単語の始まりや終わり)にマッチします。
const pattern = /\bcat\b/;
console.log(pattern.test("I have a cat")); // true
console.log(pattern.test("I have a catfish")); // false
完全一致したい場合に便利です。
※\bは英数字とアンダースコア以外を境界と判断するため、日本語では期待通りに動作しないことがあります。
10. グループ化 ()
パターンをグループ化して、まとめて扱えます。
// 繰り返しをグループ全体に適用
const pattern1 = /(ha)+/;
console.log(pattern1.test("hahaha")); // true
// 選択肢の指定
const pattern2 = /(cat|dog)/;
console.log(pattern2.test("I have a cat")); // true
console.log(pattern2.test("I have a dog")); // true
実践的な例
メールアドレスのチェック
const emailPattern = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/;
console.log(emailPattern.test("user@example.com")); // true
console.log(emailPattern.test("invalid.email")); // false
console.log(emailPattern.test("user@example")); // false
パターンの意味を分解すると次のようになります。
-
^- 文字列の先頭 -
[a-zA-Z0-9._%+-]+- 英数字とピリオドなどの記号が1文字以上 -
@- @記号 -
[a-zA-Z0-9.-]+- ドメイン名部分 -
.- ドット(エスケープが必要) -
[a-zA-Z]{2,}- トップレベルドメイン(2文字以上) -
$- 文字列の末尾
※この正規表現は一般的な用途向けの簡易チェックです。
RFC準拠の厳密なチェックには向いていません。
電話番号の正規化
const phone = "090-1234-5678";
const normalized = phone.replace(/-/g, "");
console.log(normalized); // "09012345678"
/パターン/g の g は「全てにマッチ」を意味します。(グローバルフラグ)。
URLの抽出
const text = "公式サイトはhttps://example.comです";
const urlPattern = /https?:\/\/[^\s]+/;
const match = text.match(urlPattern);
console.log(match[0]); // "https://example.com"
※句読点や括弧が末尾に付くと誤検出しやすいので注意。
より厳密な抽出には/https?://[^\s、。]+/などの調整が必要です。
エスケープが必要な文字
正規表現で特別な意味を持つ文字を検索したい場合は、バックスラッシュ \ でエスケープします。
// ドットを検索したい場合
const pattern = /\./;
console.log(pattern.test("example.com")); // true
// エスケープが必要な文字
// . * + ? ^ $ { } ( ) | [ ] \ /
よく使う特殊文字のまとめ
| 記号 | 意味 | 名前 |
|---|---|---|
. |
任意の1文字 | ドット(ワイルドカード) |
* |
0回以上の繰り返し | アスタリスク |
+ |
1回以上の繰り返し | プラス |
? |
0回または1回 | クエスチョン |
\d |
数字 | ディジットクラス |
\D |
数字以外 | 非ディジットクラス |
\w |
英数字とアンダースコア | ワードクラス |
\W |
英数字とアンダースコア以外 | 非ワードクラス |
\s |
空白文字 | ホワイトスペースクラス |
\S |
空白文字以外 | 非ホワイトスペースクラス |
^ |
行頭 | キャレット(行頭アンカー) |
$ |
行末 | ダラー(行末アンカー) |
[] |
文字クラス | 文字クラス |
() |
グループ化 | グループ(キャプチャグループ) |
| |
または | パイプ(バーティカルバー) |
\b |
単語の境界 | ワード境界 |
まとめ
正規表現の基本パターンを10個紹介しました。
最初は難しく感じるかもしれませんが、基本パターンを組み合わせることで複雑な検索も可能になります。まずは簡単なパターンから試して、少しずつ慣れていきましょう。
実際のコードで使いながら覚えるのが一番の近道です。ぜひ今日から正規表現を活用してみてください!