JavaScript の 正規表現(RegExp) は最初むずかしく見えますが、実は「文字のパターンを探す道具」と考えると理解しやすいです。
ここでは、初心者がまず押さえるべきポイント10個にしぼって、わかりやすく整理します。
1. 正規表現は「文字パターンの検索ルール」
普通の検索:
"apple".includes("a") // true
JavaScript
正規表現検索:
/apple/.test("pineapple") // true
JavaScript
→ "apple" のような単語だけでなく、**「数字が3つ続く」**などのパターンも表現できます。
2. 作り方は2通り
| 書き方 | 例 | よく使う場面 |
|---|
| リテラル | /abc/ | 固定パターンを探すとき |
| コンストラクタ | new RegExp("abc") | 変数で動的に作るとき |
3. フラグ(オプション)を知ろう
正規表現の末尾に小文字をつけて、検索モードを変えられます。
| フラグ | 意味 | 例 |
|---|
g | global(全体検索) | /a/g すべての “a” |
i | ignoreCase(大文字小文字無視) | /abc/i は “ABC” にもマッチ |
m | multiline(複数行対応) | ^ や $ が各行に効く |
4. 基本の文字とメタ文字
| 書き方 | 意味 | 例 |
|---|
. | 任意の1文字(改行除く) | /a.c/ → “abc”, “axc” |
\d | 数字(0〜9) | /\d\d/ → 2桁の数字 |
\w | 英数字+アンダースコア | /\w+/ → 単語っぽい文字列 |
\s | 空白(スペースや改行) | /\s+/ → 空白1つ以上 |
^ | 文字列の先頭 | /^A/ → Aで始まる文字列 |
$ | 文字列の末尾 | /z$/ → zで終わる文字列 |
5. 繰り返しを表す「量指定子」
| 記号 | 意味 | 例 |
|---|
* | 0回以上 | /bo*/ → “b”, “bo”, “boo” |
+ | 1回以上 | /a+/ → “a”, “aaa” |
? | 0回か1回 | /colou?r/ → “color” or “colour” |
{n} | ちょうどn回 | /\d{3}/ → 3桁の数字 |
{n,} | n回以上 | /a{2,}/ → “aa”, “aaa”, … |
{n,m} | n〜m回 | /\d{2,4}/ → 2〜4桁の数字 |
6. 文字クラス「[]」でまとめて指定
| パターン | 意味 | 例 |
|---|
[abc] | aまたはbまたはc | /[abc]/ |
[a-z] | 小文字のa〜z | /[a-z]/ |
[^0-9] | 数字以外 | /[^0-9]/ |
7. グループ化・キャプチャ ()
丸括弧 () は「1つのかたまり」として扱います。
また、マッチ部分を後で取り出すこともできます。
const date = "2025-10-13";
const re = /(\d{4})-(\d{2})-(\d{2})/;
const result = re.exec(date);
console.log(result[1]); // "2025"
JavaScript
8. 先読み・後読み(アサーション)
条件付きマッチを作れます(ちょっと上級ですが重要)。
| パターン | 意味 | 例 |
|---|
(?=X) | Xが後ろに続く場合 | /foo(?=bar)/ → “foobar” の “foo” にマッチ |
(?!X) | Xが後ろに続かない場合 | /foo(?!bar)/ |
(?<=X) | Xの後にある場合(後読み) | (?<=\$)\d+ → “$100” から “100” を取る |
9. よく使うメソッド
| メソッド | 使い方 | 結果 |
|---|
.test() | /abc/.test("zabcx") | true |
.exec() | /\d+/.exec("abc123") | ["123"] |
.match() | "a1b2".match(/\d/g) | ["1","2"] |
.replace() | "abc".replace(/a/, "A") | "Abc" |
.split() | "a,b,c".split(/,/) | ["a","b","c"] |
10. よくある落とし穴
. は改行にマッチしない(→ /./s フラグで解決)
- 特殊文字はエスケープが必要:
\. \* \? など
/a/g.test() を何度も呼ぶと結果がズレる(lastIndexの副作用)
- 長すぎる正規表現は可読性が落ちるのでコメント化や分割を活用する
総まとめ
| 目的 | 書き方例 |
|---|
| 数字だけの文字列か? | /^\d+$/ |
| メールアドレスか? | /^\w+@\w+\.\w+$/(簡易版) |
| 日付フォーマット(YYYY-MM-DD) | /^\d{4}-\d{2}-\d{2}$/ |
| 空白を削除 | .replace(/\s+/g, "") |
| 文末のピリオドを削除 | .replace(/\.$/, "") |