🔰はじめての方へ

正規表現チートシート|.htaccess・VSCode・JavaScriptで使える記号の早見表

サイト作成
記事内に広告が含まれています。
スポンサーリンク

別の記事で.htaccessについて書いたときに、正規表現を使いました。

そのときに、記号の意味をすぐに見返せる早見表があればいいなと思いました。

なので、コードを書くときに使う正規表現を、調べた範囲でまとめています。

.htaccessの記事(一部のエリアだけ検索に出してそれ以外をnoindexにする方法)はこちらです。

.htaccessの書き方を初心者向けに解説|一部のエリアだけ検索に出してそれ以外をnoindexにする方法
.htaccessの意味と基本の書き方を初心者向けに解説。たくさんのページの中から特定のエリアだけを検索にインデックスさせ、それ以外にnoindexを付けるコードを1行ずつ読み解きます。

正規表現は、使う環境によって書き方や使える記号が少しずつ違います。

この記事では.htaccess(Apache)・VSCodeの検索と置換・JavaScriptの3つで共通して使える記号を中心にまとめています。

ほかの環境(Excel、Googleスプレッドシート、Pythonなど)では動きが違う場合があります。

正規表現ってなんぞや!?

正規表現は、文字のパターンを記号で表す書き方です。

たとえば「数字が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、%2RewriteCondで記憶した部分を呼び出す.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にする方法の書き方は、こちらの記事にまとめています。

.htaccessの書き方を初心者向けに解説|一部のエリアだけ検索に出してそれ以外をnoindexにする方法
.htaccessの意味と基本の書き方を初心者向けに解説。たくさんのページの中から特定のエリアだけを検索にインデックスさせ、それ以外にnoindexを付けるコードを1行ずつ読み解きます。