正規表現チェッカーの使い方
- 正規表現を入力します。前後のスラッシュは付けずに、
/\d+/ではなく\d+と書きます。 - フラグを入力します。すべての一致を探すなら
g、大文字と小文字を区別しないならgi、ひらがなや漢字を\p{…}で指定するならuを加えます。 - テストするテキストを貼り付けます。一致した箇所がテキスト内でハイライトされ、表に一致ごとの位置と各キャプチャグループの中身が並びます。
- 置換を試すときは検索して置換を選び、置換後の文字列を書きます。グループは
$1や$<name>で参照でき、結果はコピーボタン付きで一番上に表示されます。 - コードに貼るときは、結果の「正規表現リテラル」と「JavaScriptのコード」を使います。後者は文字列用にバックスラッシュを二重にした
new RegExp(…)の形です。
パターンに文法の誤りがあれば、何が問題でどう直せばよいかを日本語で示し、最後にブラウザ自身のエラーメッセージを添えます。
このチェッカーの正規表現は「JavaScript方式」
正規表現には方言があります。このページは、お使いのブラウザのJavaScriptエンジン(Chrome・EdgeのV8、FirefoxのSpiderMonkey、SafariのJavaScriptCore)でパターンを実行します。いずれもECMAScriptの規格に従っているので、ここで動いたパターンはJavaScript、TypeScript、Node.jsでも同じように動きます。VS Codeのエディター内の検索・置換もJavaScriptの正規表現なので、ほぼそのまま使えます。サクラエディタ(bregonig.dll)、PHPのPCRE、Pythonの re、Javaとは大部分が共通ですが、次の点が違います。
| 機能 | JavaScript(このチェッカー) | PCRE・Pythonなど |
|---|---|---|
後読み (?<=…) (?<!…) | 使える(長さの制限なし) | 使える。Pythonは固定長のみ |
| 名前付きグループ | (?<name>…)、\k<name>、置換では $<name> | Pythonは (?P<name>…) と \g<name> |
強欲な量指定子 a++、アトミックグループ (?>…) | 使えない | PCREは使える。Pythonは3.11から |
\d と全角数字 | \d は半角の0〜9だけ(u フラグでも同じ) | Python 3は全角の0〜9にも一致 |
Unicodeプロパティ \p{Script=Han} | u フラグか v フラグで使える | PCREは使える。Pythonの re は不可 |
インラインフラグ (?i) | パターン全体には不可(最新のブラウザは部分的な (?i:…) のみ) | 使える |
\A、\Z、再帰、条件分岐 | 使えない | PCREは使える |
u フラグも v フラグもないと、JavaScriptは知らないエスケープを普通の文字として読みます。\A は「A」に、\p{L} は「p{L}」に一致してしまうので、このチェッカーはどちらも警告します。
ひらがな・カタカナ・漢字・全角文字を正規表現で扱う
日本語のテキストでは、文字の種類で絞り込みたい場面がよくあります。次の表は、サンプル文「ひらがなとカタカナ、ラーメン・ヴァイオリン、漢字の人々、ABC123とABC123、カタカナ。」に各パターンを当てた結果で、このチェッカーと同じコードで求めています。
| 対象 | パターン | フラグ | 一致した文字列 | 注意点 |
|---|---|---|---|---|
| ひらがな | \p{Script=Hiragana}+ | gu | ひらがなと、の、と | ひらがなだけ。長音の「ー」は含まない |
| カタカナ(長音を含む) | [\p{Script=Katakana}ー]+ | gu | カタカナ、ラーメン、ヴァイオリン、カタカナ | ー(U+30FC)はどの文字体系にも属さない「共通」の文字なので、明示的に足します。半角カナも含みます |
| カタカナ(範囲指定) | [ァ-ン]+ | g | カタカナ、ラ、メン、ァイオリン | ァ〜ン(U+30A1〜30F3)の範囲には ヴ、ヵ、ヶ、ー が入りません |
| 漢字 | \p{Script=Han}+ | gu | 漢字、人々 | 「々」も漢字として扱われます(「〆」は対象外) |
| 全角英数字・記号 | [!-~]+ | g | ABC123 | !から~までの全角記号・英数字。全角スペース(U+3000)は別です |
| 半角カタカナ | [。-゚]+ | g | カタカナ | 。 から ゚ まで。濁点「゙」は別の1文字です |
| 数字(\d) | \d+ | g | 123 | \d は u フラグを付けても半角の 0〜9 だけで、全角の123には一致しません |
- u フラグを付けましょう。
\p{Script=Hiragana}のようなUnicodeプロパティは u フラグがないと使えません。また「𠮷」のような常用外の一部の漢字は2つの符号単位(サロゲートペア)でできていて、u フラグがないと.が半分ずつに分けてしまいます。 - \s は全角スペースにも一致します。JavaScriptの
\sはUnicodeの空白をすべて含むため、全角スペース(U+3000)も対象です。半角スペースだけを狙うなら[ ]やと書きます。 - \w と \b は日本語に使えません。
\wは半角英数字とアンダースコアだけなので、漢字やかなは「単語の文字」になりません。\bも英数字の境目しか見ないため、日本語の単語の区切りには使えません。 - i フラグは全角英字にも効きます。
/a/iは「A」にも一致します。ただし全角と半角(AとA)を同じものとして扱うことはないので、表記ゆれを吸収するには、先に文字列をnormalize('NFKC')で正規化するか、[\uFF01-\uFF5E]を0xFEE0引いて半角に置き換えます。
正規表現チートシート
文字と文字クラス
| 書き方 | 意味 |
|---|---|
. | 改行以外の任意の1文字(s フラグなら改行も) |
\d \D | 半角数字0〜9 / それ以外 |
\w \W | 半角英数字とアンダースコア / それ以外 |
\s \S | 空白・タブ・改行(全角スペースを含む) / それ以外 |
[abc] | a、b、c のどれか1文字 |
[^abc] | a、b、c 以外の1文字 |
[a-z0-9] | 範囲指定:英小文字か数字 |
\p{L} \p{N} | あらゆる文字体系の文字 / 数字(u か v フラグ) |
\. \* \\ | ドット、アスタリスク、バックスラッシュそのもの。. * + ? ^ $ ( ) [ ] { } | \ / はバックスラッシュでエスケープ |
位置(アンカー)
| 書き方 | 意味 |
|---|---|
^ | テキストの先頭(m フラグなら各行の先頭) |
$ | テキストの末尾(m フラグなら各行の末尾) |
\b | 単語の境界(\w と \W の間) |
\B | 単語の境界ではない位置 |
量指定子
| 書き方 | 意味 |
|---|---|
* | 0回以上 |
+ | 1回以上 |
? | 0回か1回(省略可能) |
{3} | ちょうど3回 |
{2,5} | 2〜5回 |
{2,} | 2回以上 |
*? +? ?? | 最短一致(できるだけ少なく) |
グループと先読み・後読み
| 書き方 | 意味 |
|---|---|
(abc) | キャプチャグループ。開きかっこの順に1から番号が付く |
(?<name>abc) | 名前付きキャプチャグループ |
(?:abc) | キャプチャしないグループ |
\1 \k<name> | グループ1 / 名前付きグループと同じ文字列 |
a|b | a または b |
(?=abc) (?!abc) | 後ろに abc が続く / 続かない(先読み) |
(?<=abc) (?<!abc) | 前に abc がある / ない(後読み) |
置換で使える記号
| 書き方 | 意味 |
|---|---|
$1 $<name> | グループ1 / 名前付きグループの文字列 |
$& | 一致した文字列全体 |
$` $' | 一致した箇所より前 / 後ろのテキスト |
$$ | ドル記号そのもの |
すぐ使えるパターン集
欄にコピーして調整してください。「例文での結果」はこのチェッカーのコードで求めたものです。
| 用途 | パターン | フラグ | 例文での結果 | メモ |
|---|---|---|---|---|
| 郵便番号 | \b\d{3}-\d{4}\b | g | 〒150-0041 東京都渋谷区、〒1500041 → 150-0041 | ハイフンなしも許すなら \d{3}-?\d{4} |
| 携帯電話番号 | 0[789]0-?\d{4}-?\d{4} | g | 連絡先は 090-1234-5678 または 08012345678 です。 → 090-1234-5678、08012345678 | 070・080・090 で始まる11桁。ハイフンは省略可 |
| 日付(年月日) | (\d{4})年(\d{1,2})月(\d{1,2})日 | g | 2026年10月16日に発送、11月1日に到着予定。 → 2026年10月16日 | 年のない「11月1日」には一致しません。暦として正しいかは調べません |
| 和暦 | (明治|大正|昭和|平成|令和)(元|\d{1,2})年 | g | 平成31年4月30日、令和元年5月1日に改元。 → 平成31年、令和元年 | 「元年」にも一致。西暦への変換は和暦変換で |
| メールアドレス(実用版) | [\w.+-]+@[\w-]+(?:\.[\w-]+)+ | g | お問い合わせは info@example.co.jp まで。 → info@example.co.jp | RFC 5322 を完全に満たす正規表現はありません。実際に届くかはメールを送るまで分かりません |
| 全角スペース | | g | 山田 太郎(全角スペース入り) → | データの整形で全角スペースを半角にしたり消したりするときに |
計算例:日付を探して「年月日」に置き換える
入力欄のサンプル (?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2}) は、「年-月-日」の形の日付を探すパターンです。\d{4} はちょうど4桁の数字で、年・月・日をそれぞれ名前付きグループに入れています。g フラグがあるので、サンプルのテキストから日付を3件見つけます:位置14の2026-10-16、位置37の2026-11-15、位置59の2026-09-30。位置は0から数えるので、位置14は「一致の前に14文字ある」という意味です。日本語の文字も1文字として数えます。
検索して置換モードの置換文字列 $<year>年$<month>月$<day>日 は、グループを並べ替えて和文の日付にします。1行目は「請求書 No.1042 は 2026年10月16日 に発行され、支払期限は 2026年11月15日 です。」になります。g フラグを外すと、最初の日付だけが置き換わります。
破滅的バックトラッキング
一致に失敗すると、エンジンは後戻りして、パターンがほかの形で一致しないかを試します。ふつうは候補が少ないのですが、(a+)+、(\w*)*、(a|aa)+ のように繰り返しの中に繰り返しがあると、同じテキストの分け方が指数関数的に増えます。30個の「a」のあとに「!」が続くテキストに (a+)+$ を当てると、あきらめるまでに約230通り、10億以上の分け方を試すことになり、「a」が1つ増えるごとに時間が倍になります。
JavaScriptの正規表現は途中で止められないため、多くのテスターではこのようなパターンでタブが固まります。このページでは別のスレッド(Web Worker)で実行し、1秒たったら停止して理由を示し、入れ子の繰り返しが見つかればその部分を指摘します。直し方は、どのテキストも1通りでしか一致しないように書くことです。(a+)+$ ではなく a+$、.* ではなく区切り文字を除いた [^,]* のようにします。Webサーバーで同じパターンを使うとサービス妨害(ReDoS)の原因になるので、避けるだけでなく直しておく価値があります。
ヒントと制限
- 位置はJavaScriptの文字列と同じくUTF-16の符号単位で数えます。ひらがなや常用漢字は1、絵文字や「𠮷」などは2です。
- g フラグがないと、最初の一致だけを検索・置換します。y(位置固定)フラグでは、前の一致が終わった位置からしか一致しません。
- 一致は10,000件まで数え、表には最初の1,000件、ハイライトは先頭の100,000文字までを表示します。
- 入力欄の値全体をチェックする(バリデーション)なら、パターンを
^…$で囲みます。囲まないと長いテキストの一部にも一致します。 - サクラエディタで使うパターンを試すときは、JavaScriptにない機能(
\A、強欲な量指定子、パターン先頭の(?i)など)を避ければ、たいてい同じ結果になります。 - 抜き出したJSONを確認するならJSON整形、URLに含まれる日本語を読むならURLデコードが使えます。
入力内容は送信されません
照合はブラウザの中だけで行われ、パターンとテキストはアップロードも記録もされません。次に開いたときのために、最後の入力をこの端末に記憶します。リンクをコピーを使うと入力内容がリンクの # 以降に入りますが、この部分はブラウザがサーバーに送らない部分です。
よくある質問
このチェッカーの正規表現はどの方言ですか?
ECMAScriptの規格で定められ、すべてのブラウザに組み込まれているJavaScriptの正規表現です。JavaScript、TypeScript、Node.js、VS Codeのエディター内検索と同じように動きます。PHP、Python、Javaとも大部分は共通で、違いは上の表のとおりです。
PythonやPHPでは動くのに、ここではエラーになるのはなぜですか?
JavaScriptにない書き方が入っていることがほとんどです。(?P<name>…)、a++ のような強欲な量指定子、アトミックグループ、先頭の (?i)、\A や \Z などです。エラーメッセージが問題の箇所を示し、PythonやPCREの書き方ならJavaScriptでの書き方も表示します。
ひらがなだけ、カタカナだけに一致させるには?
u フラグを付けて、ひらがなは \p{Script=Hiragana}+、カタカナは [\p{Script=Katakana}ー]+ と書きます。長音記号「ー」はカタカナ専用の文字ではないので、足しておかないと「ラーメン」が「ラ」と「メン」に分かれます。[ァ-ン] のような範囲指定では「ヴ」が漏れます。
全角の数字に \d が一致しないのはなぜですか?
JavaScriptの \d は、u フラグを付けても半角の0〜9だけを表すためです。全角数字も含めるなら [0-90-9] と書くか、先に文字列を normalize('NFKC') で半角にそろえてから照合します。
ドットやかっこなどの記号そのものに一致させるには?
前にバックスラッシュを付けます。\. はピリオド、\( はかっこ、\$ はドル記号に一致します。角かっこの中ではほとんどの記号がそのままの意味になるので、[.] もピリオドに一致します。日本語のキーボードではバックスラッシュが「¥」と表示されることがありますが、同じ文字です。
最長一致と最短一致の違いは?
.* のような量指定子はできるだけ長く一致します(最長一致)。そのため <.*> を <b>太字</b> に当てると全体に一致します。? を付けた <.*?> は最短一致になり、最初の > で止まって <b> に一致します。
最終更新日:2026年10月16日