正規表現チェッカーの使い方
- 「正規表現」欄にパターンを入力します。前後のスラッシュは不要です(例:\d{4}-\d{2}-\d{2})。
- 必要なフラグにチェックを入れます。g グローバル、i 大文字小文字を無視、m 複数行、s dotAll、u Unicode、y sticky です。
- 「テスト文字列」に文章を貼り付けると、「マッチ結果」にハイライトが表示され、「マッチ一覧」で位置とグループを確認できます。
- 置換を試すときは「置換文字列」に $1 や $<name> などを入力します。下に置換結果のプレビューが表示されます。
フラグの意味
g(global)はすべてのマッチを探し、付けない場合は最初の 1 件だけを返します。i は大文字と小文字を区別しません。m(multiline)を付けると ^ と $ が各行の先頭と末尾にマッチし、付けない場合は文字列全体の先頭と末尾だけを表します。s(dotAll)を付けると . が改行にもマッチします。
u(unicode)は文字列をコードポイント単位で扱います。絵文字や一部の漢字(𠮷 など)のようなサロゲートペアを 1 文字として扱えるほか、\p{Script=Hiragana} のような Unicode プロパティが使えるようになります。y(sticky)は lastIndex の位置からだけマッチさせるフラグで、字句解析器を書くときに使います。
ひらがな・カタカナ・漢字・全角文字の書き方
ひらがなは u フラグを付けて \p{Script=Hiragana}、カタカナは \p{Script=Katakana}、漢字は \p{Script=Han} と書くのが確実です。昔ながらの [ぁ-ん] や [ァ-ヶ] でも多くの場合は動きますが、長音記号「ー」は \p{Script=Katakana} にも [ァ-ヶ] にも含まれないため、カタカナ語を丸ごとマッチさせるなら [\p{Script=Katakana}ー]+ のように追加します。
全角数字は [0-9]、全角英字は [A-Za-z] です。JavaScript の \d と \w は半角の英数字にしかマッチせず、\b も日本語には効かない点に注意してください。
日本でよく使うパターン例
郵便番号は ^\d{3}-?\d{4}$ で「100-0001」と「1000001」の両方を許可できます。携帯電話番号は ^0[789]0-?\d{4}-?\d{4}$、日付の「2026年10月29日」は (\d{4})年(\d{1,2})月(\d{1,2})日 で年・月・日をそれぞれ取り出せます。
メールアドレスの完全な検証は正規表現では非常に難しいため、実務では ^[^\s@]+@[^\s@]+\.[^\s@]+$ で形式だけを確認し、確認メールの送信で実在を確かめるのが一般的です。金額の「1,280円」から数字だけを取り出すなら [\d,]+(?=円) のように先読みを使います。
破滅的バックトラック(ReDoS)とは
(a+)+$ や (\w+\s?)*$ のように繰り返しが入れ子になったパターンでは、「ほとんどマッチするのに最後で失敗する」文字列に対して、正規表現エンジンが指数関数的な数の組み合わせを試してしまいます。これが破滅的バックトラックで、ページが数分間固まることもあり、ReDoS 攻撃の原理にもなっています。
このツールではマッチ処理をバックグラウンドのワーカーで実行し、1.5 秒を超えると自動で中止します。マッチは最大 1,000 件までです。改善するには、入れ子の量指定子をなくす、隣り合う部分が同じ文字にマッチしないようにする、.* の代わりに [^"]* のように具体的に書く、といった方法があります。
よくある質問
どの正規表現エンジンで動いていますか?
ブラウザに組み込まれた JavaScript(ECMAScript)の正規表現エンジンです。JavaScript、TypeScript、Node.js ではそのまま同じ動作になります。Python、PHP、Java も基本的な構文は共通ですが、名前付きグループの書き方(Python は (?P<name>…))などの細かな違いがあります。
パターンの前後にスラッシュは必要ですか?
不要です。パターン本体だけを入力し、フラグはチェックボックスで選んでください。入力欄の横に /パターン/フラグ の形で表示されます。
最長一致と最短一致の違いは何ですか?
量指定子は標準で最長一致(貪欲)で、できるだけ多くの文字にマッチします。後ろに ? を付けると最短一致になります。「<a><b>」に対して <.+> は全体に、<.+?> は <a> と <b> に別々にマッチします。
\d で全角数字にマッチしないのはなぜですか?
JavaScript の \d は半角の 0–9 だけにマッチします。全角数字も含めたい場合は [0-90-9] のように書くか、u フラグを付けて \p{Nd} を使ってください。
置換で「2026-10-29」を「2026年10月29日」にするには?
パターンを (\d{4})-(\d{2})-(\d{2})、置換文字列を $1年$2月$3日 にします。名前付きグループを使う場合は $<year>年$<month>月$<day>日 のように書けます。「サンプルを読み込む」で実際の動きを確認できます。
入力した文字列はどこかに送信されますか?
いいえ。マッチ処理はすべてブラウザ内で行われます。前回のパターンと文字列はこの端末にだけ保存され、「クリア」で消去できます。
最終更新: ソースコードを見る