無料ツール

    RegExテスター

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

    正規表現

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

    テスト文字列

    正規表現とは何ですか?

    Regexは、文字列内の文字の組み合わせに一致させるために使用されるパターンです。事実上すべてのプログラミング言語でサポートされており、テキスト処理、入力の妥当性チェック、検索・置換、ログの解析などに不可欠です。

    JavaScript の RegEx フラグ

    • g — グローバル:最初の一件だけでなく、すべての一致を検索する
    • i — 大文字・小文字を区別しない一致
    • m — 複数行: ^ および $ は行の境界に一致する
    • s — Dotall: 「.」は改行文字に一致する

    一般的な利用例

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

    Regexを使うべき場面

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

    Regex よくある質問

    手作業でRegexのパターンを作成する際に、実際に直面する疑問に対する手っ取り早い回答。

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