無料ツール

    正規表現 テスター

    リアルタイムのマッチング機能を使って、正規表現のテスト、デバッグ、可視化を行います。

    正規表現

    //g
    フラグ:
    プリセット:

    テスト文字列

    正規表現とは何ですか?

    正規表現(regex)とは、文字列内の文字の組み合わせに一致させるために使用されるパターンです。ほぼすべてのプログラミング言語でサポートされており、テキスト処理、入力の検証、検索と置換、ログの解析などに不可欠です。

    JavaScript の正規表現フラグ

    • g — グローバル:最初の一致だけでなくすべての一致を検索
    • i — 大文字小文字を区別しない
    • m — マルチライン:^と$が行の境界に一致
    • s — Dotall:.が改行文字にも一致

    主な利用シーン

    • メールアドレス、電話番号、URLの検証
    • ログファイルや構造化テキストからのデータ抽出
    • コードエディタやIDEでの検索置換
    • 入力マスクやフォームバリデーターの作成
    • CSV、JSON、XMLデータのパースと変換

    正規表現を使うべき場面

    正規表現は、テキストの照合、抽出、置換が必要な、短く明確に定義されたパターンにおいて真価を発揮します。例えば、ログ行の解析、URLルーティングルール、フォームフィールドの検証、エディタ内での検索・置換などが挙げられます。しかし、入力がHTML、JSON、ソースコード、あるいはネストされた区切り文字を含むものなど、実際に構造化された言語である場合、正規表現はかえって足かせとなります。 そのような場合は、本格的なパーサーを使用してください。今日作成した正規表現は、次のエッジケースで何の前触れもなく動作しなくなるでしょう。

    正規表現 よくある質問

    手動で正規表現パターンを作成する際に実際に直面する疑問への、手っ取り早い回答。

    このテスターはどの正規表現の仕様を使用していますか?
    ECMAScript / JavaScript の正規表現(ブラウザに組み込まれているエンジン)。 ここで機能するパターンは、`String.prototype.match`、`RegExp.test`、および最新のJSベースのリンターやエディタ拡張機能のほとんどでも機能します。PCRE(PHP、Perl)、Pythonの`re`、またはGoの`regexp`向けに記述されたパターンは、動作が異なる場合があります。特に、ルックビハインド、アトミックグループ、および名前付きグループの構文は、よく異なる点として挙げられます。
    パターンを大文字小文字を区別しないようにするにはどうすればよいですか?
    `i` フラグ(大文字小文字を区別しない)をオンにします。これにより、パターン全体に大文字小文字の区別を無効にする処理が適用されるため、`/Hello/i` は `hello`、`HELLO`、`HeLLo` に一致します。パターンの一部のみで大文字小文字を区別しないようにしたい場合は、対象となる文字を明示的に列挙する必要があります。JavaScript の正規表現では、`(?i:...)` のようなインラインのモード修飾子はサポートされていません。
    なぜ私の正規表現は複数行にわたって一致しないのでしょうか?
    マルチラインの動作に影響を与えるフラグが2つあります。 `m`(マルチライン)フラグを指定すると、`^` と `$` の動作が変更され、文字列全体の先頭や末尾だけでなく、行の境界でも一致するようになります。これは、行単位の検証を行う際に便利です。また、`s`(ドットオール)フラグを指定すると、`.` が改行にも一致するようになります。これを指定しない場合、`.*` は最初の `\n` で停止します。マルチラインのユースケースのほとんどでは、この両方のフラグが必要です。
    貪欲な量指定子と遅延量指定子の違いは何ですか?
    デフォルトでは、`*`、`+`、`{n,m}` などの量指定子は貪欲(グリーディ)です。つまり、全体の一致が成立する範囲内で、可能な限り多くの入力を消費します。 末尾に `?` を付けると、これらは遅延型になります。つまり、最小限の入力のみを消費し、残りの部分はパターンの後続の部分に任せるようになります。`` に対して貪欲な `<.+>` を適用すると文字列全体が一致しますが、遅延型の `<.+?>` を適用すると `` のみが一致します。区切り文字で囲まれたフィールドを抽出する際は、通常、遅延型の量指定子を使用するのが適切です。
    パターン内で特殊文字をエスケープするにはどうすればよいですか?
    なぜ私の正規表現は、予想よりも多く(あるいは少なく)一致するのでしょうか?