0
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

初心者でも理解できる正規表現の基本パターン10選【初心者向けまとめ】

0
Posted at

初心者でも理解できる正規表現の基本パターン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"

/パターン/gg は「全てにマッチ」を意味します。(グローバルフラグ)。

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個紹介しました。

最初は難しく感じるかもしれませんが、基本パターンを組み合わせることで複雑な検索も可能になります。まずは簡単なパターンから試して、少しずつ慣れていきましょう。

実際のコードで使いながら覚えるのが一番の近道です。ぜひ今日から正規表現を活用してみてください!

0
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?