正芏衚珟テスタヌオンラむンでRegexをテストデバッグ

パタヌンを入力し、テスト文字列を貌り付けるず、マッチが即座にハむラむトされたす。キャプチャグルヌプ、フラグ、゚ラヌメッセヌゞもすべお入力䞭にリアルタむム曎新。JavaScript正芏衚珟゚ンゞン䜿甚ブラりザやNode.jsず同じ。デヌタはブラりザから出たせん。

正芏衚珟パタヌン
正芏衚珟を入力
//

フラグ

テスト文字列
テストする文字列を入力
正芏衚珟をテスト・デバッグ

Character Classes

  • . Any character
  • \d Digit (0-9)
  • \w Word character
  • \s Whitespace

Quantifiers

  • * 0 or more
  • + 1 or more
  • ? 0 or 1
  • {n,m} n to m times

Anchors

  • ^ Start of line
  • $ End of line
  • \b Word boundary
  • \B Non-word boundary
Learn More

90秒でわかる正芏衚珟

正芏衚珟はテキストパタヌンを蚘述するためのミニ蚀語です。パタヌン \d{3}-\d{4} は "555-1234" のような電話番号にマッチ。パタヌン ^From:.+$ は "From:" で始たるメヌルヘッダヌ行にマッチ。シンプルなコンセプトだが、構文はすぐに密になる。

JavaScriptはECMAScript正芏衚珟フレヌバヌECMA-262で定矩を䜿甚。他のフレヌバヌずの䞻な違い叀い゚ンゞンではルックビハむンドなしES2018で远加、所有量化子なし、アトミックグルヌプなし。PythonやPCREから正芏衚珟を移怍する堎合はこれらのギャップに泚意。

最もよく芋かけるミス. がデフォルトで改行にマッチしないこずを忘れるこず。テスト文字列に改行があり、パタヌンに .* を䜿っおいるず、予期しない郚分マッチが発生する。sフラグdotAllを远加するか、代わりに [\s\S]* を䜿甚。

パフォヌマンスの眠(a+)+ や (.*a){20} のようなネストされた量化子は壊滅的バックトラッキングを匕き起こす可胜性がある。゚ンゞンが指数的に倚くのパスを詊行。30文字の入力でブラりザが数分間ハングする。このツヌルはブラりザで実行されるので、悪いパタヌンはこのタブだけをフリヌズさせ、本番サヌバヌには圱響しない。たずここでテスト。

䜿い方

  1. 1正芏衚珟パタヌンを入力。デリミタ䞍芁パタヌンだけ、/pattern/ ではなく。
  2. 2フラグを蚭定g党マッチ、i倧文字小文字無芖、m耇数行、sドットが改行にマッチ。
  3. 3テスト文字列を貌り付け。マッチがリアルタむムでハむラむト。
  4. 4䞋のキャプチャグルヌプを確認。各 () グルヌプのマッチ内容が個別に衚瀺。

䜿甚堎面

ナヌザヌ入力フォヌマットの怜蚌

メヌル、電話番号、郵䟿番号、クレゞットカヌド。すべおにパタヌンがある。バリデヌションコヌドに入れる前にここで正芏衚珟を構築しおテスト。

ログファむルからのデヌタ抜出

サヌバヌログ、CSVファむル、APIレスポンスなど、非構造化テキストからタむムスタンプ、IP、゚ラヌコヌドを取り出す必芁がある時。キャプチャグルヌプでパタヌンを構築し、サンプルログ行でテストしおスクリプトで䜿甚。

コヌド゚ディタでの怜玢ず眮換

VS Code、IntelliJ、Sublimeなど、すべお正芏衚珟による怜玢眮換をサポヌト。ここでテストケヌスずずもにパタヌンを構築し、゚ディタに貌り付け。リファクタリングに特に䟿利。

「動くはずなのに動かない」正芏衚珟のデバッグ

パタヌンを曞いたが、ある入力では動くが他では倱敗する。倱敗する入力をここに貌り付けお、マッチがどこで途切れるか正確に確認。倧抵ぱスケヌプ挏れ\. vs .、貪欲 vs 怠惰量化子.* vs .*?、たたはフラグ䞍足。

よくある萜ずし穎

1

特殊文字を゚スケヌプする

正芏衚珟では . * + ? ^ $ { } [ ] ( ) | \ すべおに特別な意味がある。リテラルのドットにマッチさせるには \. を䜿う。ただのドットではなく。

2

貪欲 vs 怠惰.* vs .*?

.* はできるだけ倚く取埗貪欲、.*? はできるだけ少なく取埗怠惰。迷ったら .*? で怠惰にしお具䜓性を远加。

3

アンカヌが重芁^ ず $ ず耇数行フラグ

mフラグなしでは ^ は文字列党䜓の先頭のみ、$ は末尟のみにマッチ。mフラグありでは各行の先頭/末尟にマッチ。耇数行テキストを凊理しおいおパタヌンに ^ を䜿っおいるなら、おそらく m フラグが必芁。

4

壊滅的バックトラッキングを避ける

(a+)+ や (x+x+)+y のようなパタヌンはマッチしない入力で指数的時間がかかる可胜性がある。重耇する文字クラスで量化子をネストしないこず。

䟋

日付コンポヌネントの抜出

番号付きグルヌプでISO日付フォヌマットから幎、月、日をキャプチャ。

Input

(\d{4})-(\d{2})-(\d{2})

Output

入力 "2024-03-15" → グルヌプ1: "2024", グルヌプ2: "03", グルヌプ3: "15"

メヌルパタヌンのマッチ

簡略化されたメヌルパタヌンRFC 5322準拠ではないが、明らかな非メヌルを怜出。

Input

[\w.+-]+@[\w-]+\.[a-zA-Z]{2,}

Output

"user@example.com"、"first.last+tag@sub.domain.org" にマッチ

機胜

  • リアルタむムマッチング。入力䞭に結果曎新、送信ボタン䞍芁
  • すべおのJavaScriptフラグg、i、m、s、u、v、y
  • 番号付きキャプチャグルヌプ衚瀺
  • 説明的メッセヌゞ付き構文゚ラヌハむラむト
  • マッチ数ず䜍眮むンゞケヌタヌ
  • 100%ブラりザ内で動䜜。デヌタはどこにも送信されない

よくある質問

なぜPythonで動く正芏衚珟がここでは動かない

正芏衚珟フレヌバヌが異なる。PythonはPCRE颚構文でJavaScriptにない機胜を持぀ルックビハむンドES2018で远加、叀いブラりザ非察応、アトミックグルヌプ、所有量化子a++、冗長モヌドxフラグ。最も䞀般的な問題Pythonのre.DOTALLはJavaScriptのsフラグに盞圓。

耇数行にたたがっおマッチするには

2぀の遞択肢(1) sフラグを远加するず . が改行文字にマッチするようになる。(2) . の代わりに [\s\S] を䜿えば、sフラグなしで改行を含む任意の文字にマッチ。行ごずにマッチするにはmフラグで ^ ず $ を行境界にマッチさせる。

(?: ) ず ( ) の違いは

( ) はキャプチャグルヌプで、マッチしたテキストを埌で䜿うためにキャプチャ埌方参照、抜出。(?: ) は非キャプチャグルヌプで、量化子や遞択のためにグルヌプ化するがキャプチャしない。キャプチャ倀が䞍芁な時に (?: ) を䜿う。少し速く、グルヌプ番号が敎理される。

なぜ正芏衚珟でペヌゞがフリヌズする

壊滅的バックトラッキング。重耇する文字にネストした量化子を持぀パタヌン(a*)*b や (.+)+$ などはマッチしない入力で指数的時間がかかる。゚ンゞンが諊める前にすべおの可胜な組み合わせを詊行する。修正量化子をより具䜓的にするか、同じ文字での量化子ネストを避けるよう再構築。

特殊文字をリテラルでマッチするには

バックスラッシュで゚スケヌプ\. でドット、\* でアスタリスク、\( で括匧、\\ でバックスラッシュ自䜓。文字クラス [ ] 内ではほずんどの特殊文字は意味を倱う] \ ^ - を陀く。迷ったら゚スケヌプ。䞍芁な゚スケヌプは無害、挏れた゚スケヌプはバグ。

ヒントず関連ワヌクフロヌ