正規表現テスト

正規表現がどこに一致するかをその場で色分けして確かめられます。キャプチャグループの中身と置換結果も同時に表示。 暴走するパターンを書いても画面は固まりません

一致した数0
使用中のフラグg

一致した箇所

受付 2026-09-04 と 2026-12-31 の2件。
不正な日付 2026-13-99 も形だけは一致します。

実行は別スレッド(Web Worker)で行い、2秒を超えたら打ち切ります。 暴走するパターンを書いても画面は固まりません。処理はすべて端末内で完結し、入力は送信されません。

使い方

上の欄に正規表現を、下の欄に調べたい文字列を入れると、一致した箇所がその場で色付きになります。入力欄には正規表現そのものを書いてください。ソースコードに書くときのような \\d の二重エスケープは不要です。

フラグの意味

フラグ働き
g(全体)最初の1件でなく、すべての一致を探す
i(大小無視)大文字と小文字を区別しない
m(複数行)^ と $ が各行の先頭・末尾に一致する
s(改行も.). が改行にも一致する
u(Unicode)\u{1F600} のような書き方や絵文字を正しく扱う
y(先頭固定)lastIndex の位置からしか一致しない

書き方の早見表

書き方意味
.任意の1文字(改行を除く)a.c → abc, a1c
\d数字1文字\d{3} → 123
\w英数字とアンダースコア\w+ → hello_1
\s空白(スペース・タブ・改行)a\s+b → a b
[abc]a か b か c[aeiou] → 母音
[^abc]a b c 以外[^0-9] → 数字以外
*直前を0回以上ab*c → ac, abc, abbc
+直前を1回以上ab+c → abc, abbc
?直前を0回か1回colou?r → color, colour
{n,m}直前をn回以上m回以下\d{3,4} → 123, 1234
|どちらかcat|dog
()グループ化して取り出す(\d+)-(\d+)
(?<name>)名前を付けて取り出す(?<year>\d{4})
(?:)グループ化するが取り出さない(?:ab)+
^ $先頭・末尾^abc$
\b単語の境界\bcat\b
(?=)先読み(その位置の後ろが一致)a(?=b)
(?!)否定先読みa(?!b)

置換で使える書き方

置換後の文字列では、一致した内容を差し込む特別な書き方が使えます。

$&一致した文字列全体
$1 $2 …1番目・2番目のキャプチャグループ
$<name>名前付きグループ
$`一致した箇所より前
$'一致した箇所より後ろ
$$ドル記号そのもの

固まる正規表現に注意

(a+)+b のように繰り返しが入れ子になっていると、 一致しない文字列を与えたときに試す組み合わせが爆発的に増えます。aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa(aが30個)を与えるだけで、 実質的に終わらない計算になります。これを catastrophic backtracking と呼びます。

JavaScript の正規表現は同期実行で途中では止められません。 そのため当ツールは実行を Web Worker(別スレッド)に逃がし、 2秒を超えたら worker ごと打ち切っています。画面が固まらないのはこのためです。 自分のプログラムに正規表現を組み込むときは、この危険を意識してください。

  • 繰り返しの入れ子を避ける(a+)+a+ で足りることが多いです。
  • 文字クラスで絞る.* より [^"]* のほうが後戻りが起きにくくなります。
  • 利用者が入力した文字列を、そのままパターンにしない — 攻撃に使われます。

よくある質問

この正規表現はどの言語のものですか?

JavaScript(ECMAScript)の正規表現です。基本的な書き方は Python・Ruby・PHP などとほぼ共通ですが、後方参照や先読みの細かい挙動、使えるフラグには違いがあります。とくに Java や .NET にある可変長の後読みは JavaScript でも使えますが、POSIX の文字クラス([:alpha:] など)は使えません。

入力するとき、バックスラッシュはエスケープが必要ですか?

不要です。この入力欄には正規表現そのものを書きます。たとえば数字4桁なら \d{4} とそのまま入れてください。プログラムのソースコードに文字列として書くときだけ \\d{4} のように二重にする必要があります。

gフラグを付けないと1件しか出ないのはなぜですか?

gフラグは「最初の1件で止めず、すべて探す」という指示だからです。付けないと最初に一致した箇所だけを返します。置換も同じで、gなしだと1件目しか置き換わりません。ふだんは付けておくと分かりやすいはずです。

「打ち切りました」と出るのはなぜですか?

正規表現の総当たり(バックトラック)が爆発しているためです。(a+)+b のように繰り返しが入れ子になっていると、少し長い文字列を与えるだけで試行回数が指数関数的に増え、事実上終わりません。入れ子の繰り返しを避ける、量指定子を最小マッチ(*? や +?)にする、文字クラスで絞るといった書き換えで解消できます。

置換で $1 が文字として出てしまいます。

キャプチャグループがない場合、$1 は置き換え先が無いのでそのまま残ります。パターン側を (…) で囲んでグループを作ってください。名前付きグループを使ったときは $<名前> の形で参照します。ドル記号そのものを出したいときは $$ と書きます。

入力した内容は送信されますか?

いいえ。正規表現の実行も置換もすべてブラウザ内(Web Worker)で行われ、入力内容が外部へ送信・保存されることはありません。

関連ツール

決まった文字列の置き換えだけなら 文字列一括置換 が手軽です。 整形や重複行の削除は テキスト整形テキストクリーナー、 変更点の確認は テキスト差分 をどうぞ。 データの加工には CSV⇄JSON変換JSON整形、 文字の数え上げは 文字数カウント、 記号の確認は 文字コード変換 が使えます。