JavaScript「正規表現」要点まとめ
1. 正規表現とは
- 文字列のパターンを表現するための仕組み。
- 検索・置換・抽出などを柔軟に行える。
- JavaScript では
RegExp オブジェクトとして扱う。
2. 作り方(2通り)
| 方法 | 記法 | 用途 |
|---|
| リテラル | /pattern/flags | 一定のパターンを使うとき |
| コンストラクタ | new RegExp("pattern", "flags") | 動的にパターンを作るとき |
例:
const re1 = /abc/;
const re2 = new RegExp("abc");
JavaScript
3. 主なフラグ(オプション)
| フラグ | 意味 |
|---|
g | 全体検索(複数ヒット) |
i | 大文字・小文字を無視 |
m | 複数行モード |
s | 改行も含めて「.」にマッチ |
u | Unicode モード |
y | 現在位置からのみマッチ(sticky) |
4. 基本の構文(パターンの書き方)
| 記号 | 意味 | 例 |
|---|
. | 任意の1文字 | /a.c/ → “abc”, “axc” |
\d | 数字(0–9) | /\d\d/ → 2桁の数字 |
\w | 英数字+_ | /\w+/ → 単語にマッチ |
\s | 空白文字 | /\s+/ → 空白部分 |
^ / $ | 文字列の先頭/末尾 | /^abc$/ → “abc”全体一致 |
[abc] | いずれかの1文字 | /[aeiou]/ → 母音 |
[^abc] | a,b,c以外の1文字 | /[^0-9]/ → 数字以外 |
( ) | グループ化 | /(ab)+/ → “ab” 繰返し |
| ` | ` | OR(どちらか) |
5. 繰り返し(量指定子)
| 記号 | 意味 | 例 |
|---|
* | 0回以上 | /bo*/ → “b”, “bo”, “boo” |
+ | 1回以上 | /a+/ → “a”, “aa” |
? | 0または1回 | /colou?r/ → “color” or “colour” |
{n} | ちょうど n 回 | /\d{3}/ → 3桁の数字 |
{n,} | n回以上 | /a{2,}/ → 2回以上のa |
{n,m} | n〜m回 | /a{2,4}/ → 2〜4回のa |
貪欲(greedy)と非貪欲(lazy)
*, +, {} はデフォルトで「できるだけ多く」マッチ。
*?, +?, {n,m}? のように ? を付けると最小限に。
6. よく使うメソッド
| メソッド | 概要 | 戻り値 |
|---|
test(str) | マッチするか確認 | true / false |
exec(str) | 詳細なマッチ結果を取得 | 配列 or null |
str.match(re) | マッチ部分を配列で返す | 配列 |
str.search(re) | 最初のマッチ位置を返す | 数値 or -1 |
str.replace(re, newStr) | 置換 | 新しい文字列 |
str.split(re) | 正規表現で分割 | 配列 |
例:
/abc/.test("123abc") // true
"2025-10-13".match(/\d+/g) // ["2025", "10", "13"]
"dog".replace(/d/, "c") // "cog"
JavaScript
7. 注意ポイント
- エスケープが必要な記号
. * + ? ^ $ { } ( ) [ ] | \ は「\」を付けて文字として扱う。
g フラグ付きの test() は状態を持つ
同じ正規表現で連続して呼ぶと、lastIndex が進む。
- 読みやすさ重視!
長いパターンは分割・コメント付き構文(xフラグがないのでJSでは工夫が必要)で整理。
例題(理解チェック)
// 数字だけの文字列?
/^\d+$/.test("12345") // ✅ true
/^\d+$/.test("12a45") // ❌ false
// メールっぽい文字列
/^[\w.-]+@[\w.-]+\.[a-z]{2,}$/i.test("test@mail.com") // ✅
// 3桁ごとにカンマを挿入
"1000000".replace(/\B(?=(\d{3})+(?!\d))/g, ",") // "1,000,000"
JavaScript
まとめ(初心者がまず押さえる3点)
- 「文字列をパターンで探す」道具が正規表現。
- メタ文字(
. * + ? [] () ^ $など)の意味を覚える。
test() と replace() から始めると理解しやすい。