別の記事で.htaccessについて書いたときに、正規表現を使いました。
そのときに、記号の意味をすぐに見返せる早見表があればいいなと思いました。
なので、コードを書くときに使う正規表現を、調べた範囲でまとめています。
.htaccessの記事(一部のエリアだけ検索に出してそれ以外をnoindexにする方法)はこちらです。

正規表現ってなんぞや!?
正規表現は、文字のパターンを記号で表す書き方です。
たとえば「数字が3つ続く」「.jpgで終わる」のような条件を、短い記号の組み合わせで指定できます。
コードの中では、主に次のような場面で使われています。
- .htaccessで、特定のURLを別のURLへ転送する(リダイレクト)
- VSCodeで、ファイル内の文字をまとめて検索・置換する
- JavaScriptで、入力された文字が正しい形式かチェックする
記号の数は多いですが、よく使うものは限られています。
ここからは種類ごとに早見表にしていきます!
【早見表①】文字を表す記号
まずは「どんな文字にマッチするか」を表す記号です。
| 記号 | 意味 | 例 |
|---|---|---|
| . | 任意の1文字(改行以外) | a.c → abc、a1c にマッチ |
| \d | 数字1文字(0〜9) | \d\d → 12、05 にマッチ |
| \D | 数字以外の1文字 | \D → a、- にマッチ |
| \w | 半角英数字とアンダースコア1文字 | \w → a、Z、3、_ にマッチ |
| \W | \w以外の1文字 | \W → -、/ にマッチ |
| \s | 空白1文字(スペース、タブ、改行など) | a\sb → a b にマッチ |
| \S | 空白以外の1文字 | \S → a、1 にマッチ |
| [abc] | a、b、cのどれか1文字 | gr[ae]y → gray、grey にマッチ |
| [^abc] | a、b、c以外の1文字 | [^0-9] → 数字以外にマッチ |
| [a-z] | aからzまでの1文字(範囲指定) | [a-zA-Z0-9] → 半角英数字にマッチ |
大文字の\D・\W・\Sは、小文字の反対と覚えておくと整理しやすいと思います。
【早見表②】位置を表す記号
文字そのものではなく、「どこにあるか」を指定する記号です。
| 記号 | 意味 | 例 |
|---|---|---|
| ^ | 行(文字列)の先頭 | ^blog → blogで始まる |
| $ | 行(文字列)の末尾 | \.html$ → .htmlで終わる |
| \b | 単語の区切り | \bcat\b → cat にマッチ、category にはマッチしない |
.htaccessのリダイレクトでは、^と$でURLの始まりと終わりを固定する書き方がよく出てきます。
^は[ ]の中の先頭に書くと「〜以外」という意味に変わるので、同じ記号でも場所で意味が違うのが少しややこしいところです。
【早見表③】回数を表す記号
直前の文字(またはグループ)が何回続くかを指定する記号です。
| 記号 | 意味 | 例 |
|---|---|---|
| * | 0回以上 | ab*c → ac、abc、abbc にマッチ |
| + | 1回以上 | ab+c → abc、abbc にマッチ(acはマッチしない) |
| ? | 0回か1回 | https? → http、https にマッチ |
| {n} | ちょうどn回 | \d{3} → 123 にマッチ |
| {n,} | n回以上 | \d{2,} → 12、12345 にマッチ |
| {n,m} | n回以上m回以下 | \d{2,4} → 12、123、1234 にマッチ |
| *? / +? | できるだけ短くマッチ(最短一致) | “.+?” → 最初の ” から次の ” までにマッチ |
.* は「何でもいくつでも」という意味になるので、とても便利です。
ただ、できるだけ長くマッチしようとする性質があるので、思ったより広い範囲にマッチしてしまうことがあります。
そういうときは、後ろに?を付けた最短一致(.*?)にするという方法があります。
【早見表④】グループと参照
いくつかの文字をまとめたり、マッチした部分をあとで使い回したりする記号です。
| 記号 | 意味 | 例 |
|---|---|---|
| ( ) | グループ化して、マッチした部分を記憶する | (\d{4})-(\d{2}) → 2026と09を記憶 |
| (?: ) | グループ化するけど記憶しない | (?:jpg|png) → まとめるだけ |
| | | または | jpg|png|gif → どれかにマッチ |
| $1、$2 | 記憶した1番目、2番目の部分を呼び出す(置換で使う) | .htaccessのRewriteRule、VSCode、JavaScriptで共通 |
| %1、%2 | RewriteCondで記憶した部分を呼び出す | .htaccessのみ |
( )で囲んだ順番に$1、$2…と番号が付く、というのがポイントです。
.htaccessだけは、RewriteRuleで記憶したものは$、RewriteCondで記憶したものは%で呼び出すので、記号が2種類あります。
【早見表⑤】エスケープが必要な記号
ここまでの記号は特別な意味を持っているので、記号そのものを文字として探したいときは、前に\(バックスラッシュ)を付けます。
これをエスケープといいます。
| 探したい文字 | 書き方 |
|---|---|
| .(ドット) | \. |
| * + ? | \* \+ \? |
| ^ $ | \^ \$ |
| ( ) [ ] { } | \( \) \[ \] \{ \} |
| |(縦線) | \| |
| \(バックスラッシュ) | \\ |
| /(スラッシュ) | \/(JavaScriptの /〜/ の中で書くときのみ) |
Macの場合、\はoptionキーを押しながら¥キーで入力できます。
環境ごとの書き方の違い
同じ正規表現でも、書く場所によって前後の書き方が変わります。
ここでは.htaccess、VSCode、JavaScriptの3つを例にまとめます。
.htaccess(Apacheのmod_rewrite)
.htaccessでは、RewriteRuleとRewriteCondのパターン部分に正規表現を書きます。
Apacheの公式ドキュメントによると、mod_rewriteはPCREという種類の正規表現を使っているようです。
下のコードは、http://のアクセスをhttps://へ転送する例です。
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
^(.*)$ で「URLのパス全体」を記憶して、転送先の$1でそのまま呼び出しています。
次は、www付きのURLをwwwなしへ転送する例です。
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.example\.com$ [NC]
RewriteRule ^(.*)$ https://example.com/$1 [R=301,L]
ドメインの.を\.とエスケープしているのがポイントです。
末尾の[NC]は大文字・小文字を区別しない、[R=301]は301リダイレクト、[L]はこのルールで処理を終える、という意味のフラグです。
example.comの部分は例なので、実際に使うときは自分のドメインに置き換える必要があります。
.htaccessの書き方そのものは、別の記事で詳しくまとめています。
VSCodeの検索・置換
VSCodeでは、検索欄の右にある「.*」のアイコンをオンにすると正規表現が使えるようになります。
Macの場合は、⌘F(置換は⌥⌘F)で検索欄を開いて、⌥⌘Rでも正規表現のオン・オフを切り替えられます。
置換欄では、JavaScriptや.htaccessと同じように$1、$2で記憶した部分を呼び出せます。
たとえば、画像のパスをまとめて書き換えたいときはこうなります。
検索:src="images/(.+?)"
置換:src="/assets/images/$1"
これで、src=”images/photo.jpg” が src=”/assets/images/photo.jpg” に置き換わります。
ファイル内の空行をまとめて消したいときは、次のように書く方法があります。
検索:^\s*\n
置換:(空のまま)
一括置換は元に戻すのが大変なこともあるので、置換する前に検索結果の件数やハイライトを確認しておくと安心だと思います。
JavaScript
JavaScriptでは、正規表現を /(スラッシュ)で囲んで書きます。
後ろに付ける g(全部置換)、i(大文字・小文字を区別しない)、m(複数行モード)はフラグと呼ばれます。
const text = '2026-09-29';
const result = text.replace(/(\d{4})-(\d{2})-(\d{2})/, '$1年$2月$3日');
console.log(result); // 2026年09月29日
入力チェックでは、test()を使うと true か false で結果が返ってきます。
const zip = '123-4567';
console.log(/^\d{3}-\d{4}$/.test(zip)); // true
よく使うパターン例
コードを書くときに出てきそうなパターンを、そのまま使える形でまとめました。
| やりたいこと | 正規表現 |
|---|---|
| 数字だけかチェック | ^\d+$ |
| 半角英数字だけかチェック | ^[a-zA-Z0-9]+$ |
| 郵便番号(123-4567) | ^\d{3}-\d{4}$ |
| 画像ファイル(.jpg .png .gif)で終わる | \.(jpg|jpeg|png|gif)$ |
| httpとhttpsの両方 | ^https?:// |
| 末尾のスラッシュがあってもなくてもOK | ^blog/?$ |
| 空行 | ^\s*$ |
| 行末の余計なスペース | \s+$ |
.htaccessのRewriteRuleで使う場合、パターンには先頭の/を含めない形で書くことが多いです(例:^blog/?$)。
つまずきやすいポイント
.のエスケープ忘れ
.は「任意の1文字」なので、example.comと書くとexampleXcomのような文字にもマッチしてしまいます。
ドメインや拡張子を書くときは.にしておかないと、意図しないURLまで対象になる可能性があります。
.*が広くマッチしすぎる
.*はできるだけ長くマッチしようとするので、1行の中に同じ記号が何回も出てくると、最後の記号までまとめてマッチしてしまいます。
範囲を狭めたいときは.*?の最短一致にする方法があります。
環境によって使えない書き方がある
この記事の記号は3つの環境で共通して使えるものを中心にしていますが、細かい機能(先読み・後読みなど)は環境やバージョンで対応状況が違うようです。
うまく動かないときは、その環境の公式ドキュメントを確認するのが確実だと思います。
まとめ
.htaccessの記事で正規表現を使ったのをきっかけに、コードを書くときに使う記号を早見表にまとめました。
正規表現は記号だけ見ると難しく感じますが、文字・位置・回数・グループの4種類に分けて見ると、組み合わせで書いていることがわかります。
.htaccess、VSCode、JavaScriptでは、^や$、( )と$1のような基本の書き方は共通しているので、1つの環境で覚えたことがほかでも使えます。
一方で、%1のように.htaccessだけの書き方や、環境ごとに対応が違う機能もあるので、そこは書く場所に合わせて確認が必要です。
私自身も、次に正規表現を書くときはこの早見表を見返しながら書こうと思います。
間違っていたりしたら教えてください!
.htaccessでの一部ページをnoindexにする方法の書き方は、こちらの記事にまとめています。



