正規表現チェックツール
パターンを入力し、フラグを選んで、テスト用の文字列を貼り付けるだけです。一致したすべての箇所と位置、番号付き・名前付きキャプチャグループの中身を表示し、パターンの各部分を日本語で説明します。判定にはブラウザのJavaScriptエンジン(ECMAScript)を使います。
計算方法
この正規表現チェックツールは、ECMA-262規格で定められ、ブラウザに実装されているJavaScriptの正規表現を使います。ここで動くパターンは、Chrome、Firefox、Safari、Node.jsの String.prototype.match、matchAll、replace、RegExp.prototype.test でもまったく同じように動きます。
正規表現のテスト方法
- 前後のスラッシュを付けずにパターンを入力します(例:
\d+)。 - 必要なフラグにチェックを入れます(すべて探すなら g、大文字・小文字を無視するなら i)。
- テスト文字列を貼り付け、一致箇所、グループ、パターンの解説を確認します。
例:パターン \d{4} に g フラグを付けると、「1990年生まれ、2015年に上京」から2件見つかります。1990が位置0、2015が位置9です(位置は0から数えます)。
結果の見方
- 一致:一致した箇所ごとの位置(0から数えた文字位置。JavaScriptと同じくUTF-16単位なので、絵文字は2と数えます)と長さです。改行は ↵、タブは ⇥ で表示します。
- 一致ごとのグループ:丸かっこで取り出した中身です。番号付きグループ
( )と名前付きグループ(?<name> )を表示します。「不参加」は、そのグループが選ばれなかった選択肢の中にあることを示します。dフラグを付けると各グループの位置もわかります。 - パターンの解説:各要素の意味を日本語で説明します。字下げした行(›)はグループの中の要素です。
日本語の文字を扱うときの注意
JavaScriptの \w は半角英数字とアンダースコアだけで、ひらがな・カタカナ・漢字には一致しません。\d も半角の0〜9だけで、全角数字(123)は含みません。一方、\s は全角スペースにも一致します。日本語を指定するには u フラグを付けて \p{Script=Hiragana}(ひらがな)、\p{Script=Katakana}(カタカナ)、\p{Script=Han}(漢字)を使います。例:[\p{Script=Han}\p{Script=Hiragana}]+
フラグ
g は最初の1件だけでなくすべての一致を探し、i は大文字・小文字を区別せず、m は ^ と $ を行ごとに働かせ、s はドットを改行にも一致させます。u は絵文字などの基本多言語面の外の文字を1文字として扱い、\p{L}(あらゆる文字)のようなUnicodeプロパティを使えるようにします。v は u の新しい版で、[\p{L}--[a-z]] のような集合演算ができます。u と v は同時に使えません。y(sticky)は途切れずに続く一致だけを探します。
無限ループとフリーズの防止
a* や \b のようなパターンは空の一致を生むことがあります。このツールはJavaScript自体と同じく、その場合に1文字(u/v ではコードポイント1つ)進めるので、無限ループにはなりません。一致は最大1,000件まで探します。
より危険なのは破滅的バックトラック(ReDoS)です。(a+)+$ のように量指定子を入れ子にすると、一致しない文字列に対して試す組み合わせが指数関数的に増え、30文字でも数分かかることがあります。そのため検索は別スレッドで実行し、2秒で打ち切ります。ページが固まることはありません。自分のコードでも、特にユーザー入力に対してはこうしたパターンを避けてください。
ほかの言語の正規表現との違い
PCRE(PHP)、Python、Java、.NETとは細部が異なります。JavaScriptには強欲な量指定子(a++)、アトミックグループ、\A・\Z アンカーがありません。Pythonでは名前付きグループを伝統的に (?P<name>…) と書きます。
テスト文字列は送信も保存もされず、リンクにも含まれません。リンクに入るのはパターンとフラグだけです。
よくある質問
正規表現とは何ですか?
文字列のパターンを記号で表す書き方です。たとえば \d{3}-\d{4} は「数字3桁、ハイフン、数字4桁」を表し、郵便番号の「123-4567」に一致します。検索、置換、入力チェックに使われます。
正規表現をチェックするには?
上の欄にスラッシュなしでパターンを入力し、必要なフラグを選んで文章を貼り付けます。一致した箇所がすぐに文章中で色付き表示され、位置とともに一覧になります。その下に各グループが取り出した中身が表示されます。
\d や \s はどういう意味ですか?
\d は半角数字0〜9の1文字、\s はスペース、全角スペース、タブ、改行などの空白文字1文字です。大文字にした \D、\S はその反対で、数字以外・空白以外の1文字を表します。
キャプチャとは何ですか?
丸かっこ ( ) で囲んだ部分の一致を取り出す仕組みです。(?<name>…) と書くと名前を付けられ、コードでは match.groups.name、置換文字列では $<name>、パターン内では後方参照 \k<name> で使えます。
エスケープとは何ですか?
.、*、?、( のように特別な意味を持つ記号を、ただの文字として扱うことです。前にバックスラッシュを付けて \. と書くと、任意の1文字ではなくピリオドそのものに一致します。
ひらがなや漢字に一致させるには?
\w は日本語に一致しないため、u フラグを付けて \p{Script=Hiragana}、\p{Script=Katakana}、\p{Script=Han} を使います。範囲指定の [ぁ-ん] も使えますが、「ゔ」など一部の文字が漏れることがあります。
最長一致と最短一致の違いは?
最長一致(*、+、{2,})はできるだけ多く、後ろに ? を付けた最短一致(*?、+?)はできるだけ少なく一致します。「<b>x</b>」に対して <.+> は全体に、<.+?> は「<b>」だけに一致します。
PythonやJavaでも同じ結果になりますか?
単純なパターンなら多くの場合同じですが、保証されるのはJavaScriptだけです。PHP(PCRE)やJava、Pythonには強欲な量指定子や \A などの追加の構文があり、細かな動きが異なります。
出典・根拠
- ECMA-262 § 22.2: ECMA-262 – ECMAScript Language Specification, RegExp (Regular Expression) Objects
- MDN Web Docs – Regular expressions (Guide)
- MDN Web Docs – RegExp.prototype.flags
- MDN Web Docs – String.prototype.matchAll() (empty matches, lastIndex)
- OWASP – Regular expression Denial of Service (ReDoS)
更新日:
関連ツール
- JSON整形・構文チェック・圧縮ツールJSONを貼り付けるだけで整形・構文チェック。エラーの行と列を日本語で表示し、インデント整形、1行に圧縮、キーの並べ替えもブラウザ内で完結します。
- XML・CSV構文チェックXMLが整形式か、CSVがRFC 4180に沿っているかをブラウザ上でチェック。エラーの行と列、区切り文字の判定、表のプレビューを表示します。
- Base64エンコード・デコードBase64・Base64urlのエンコードとデコードをUTF-8で正しく変換。日本語も文字化けしません。URLエンコード・デコードにも対応した無料ツールです。
- ハッシュ生成:SHA-256・SHA-512・SHA-1・MD5テキストやファイルのSHA-256、SHA-512、SHA-1、MD5ハッシュを生成し、チェックサムを照合できます。ブラウザー内で計算、アップロード不要です。
- メールアドレスの形式チェックメールアドレスの書式がRFC 5321/5322に合っているかを一括チェック。文字数、使える文字、全角@、日本語ドメインまで確認。送信なしで端末内だけで処理します。
- CSS box-shadowジェネレーターCSSのbox-shadowをスライダーで作成。複数の影、オフセット、ぼかし、広がり、透明度付きの色、inset、プリセットに対応し、プレビューを見ながらCSSをコピーできます。