メインコンテンツへスキップ
FreeOnlineTools Go
日本語
参照

正規表現チートシート:構文、フラグ、一般的なパターン

FreeOnlineTools Team 著 · 2026-08-28を更新しました

簡単な回答

正規表現は、リテラル文字、メタ文字 (.、\d、\w、\s)、数量子 (*、+、?、{n,m})、アンカー (^、$、\b)、およびグループ ((...)、[...]) を組み合わせます。 g (グローバル)、i (大文字と小文字を区別しない)、m (複数行) などのフラグは、一致動作を変更します。テスト パターンは、コードに埋め込まれる前に Regex Tester とともに存在します。

導入

正規表現 (regex) は、コンパクトな形式言語を使用してテキスト パターンを記述します。これらは、最新のプログラミング言語、エディター、検索ツールのすべてでサポートされています。このチートシートは、ECMAScript (JavaScript で使用) で定義された構文のリファレンスと、コピーして適用できる一般的なパターンのリファレンスです。 Regex Tester を使用して、ブラウザ内のサンプル テキストに対して任意のパターンを試してください。

ステップバイステップ

  1. 文字クラス - 一連の文字と一致します

    [abc] は a、b、または c に一致します。 [^abc] は、a、b、c 以外のすべてに一致します。 [a-z] は任意の小文字と一致します。事前定義クラス: \d = [0-9]、\D = 非数字、\w = [A-Za-z0-9_]、\W = 非単語、\s = 空白、\S = 非空白、. = 改行を除く任意の文字 (改行を含めるには s フラグを使用します)。

  2. 量指定子 — 繰り返す回数

    * = 0 以上。 + = 1 以上。 ? = 0 または 1。{n} = 正確に n。 {n,} = 少なくとも n。 {n,m} = n と m の間。追加 ?遅延マッチングの場合 (例: *? は可能な限り少数のマッチング)。 Greedy がデフォルトであり、ネストされたパターンで壊滅的な後戻りを引き起こす可能性があります。

  3. アンカーと境界 - どこに一致させるか

    ^ は文字列 (または m フラグのある行) の先頭と一致します。 $ は末尾と一致します。 \b は単語境界 (\w と \W の間) に一致します。 \B は非単語境界に一致します。アンカーは幅ゼロです。文字を消費せずに位置をテストします。

  4. グループと交代

    (abc) は捕捉グループです。 $1、$2 を置き換えに使用します。 (?:abc) は非キャプチャ グループです。 (?=abc) は先読みです (その後の内容を保証します)。 (?!abc) は否定的な先読みです。 (?<=abc) は後読みです (ES2018+)。 a|b は交互 (a または b) です。

  5. フラグ — マッチング動作を変更する

    g = グローバル (最初の一致だけでなく、すべての一致を検索します)。 i = 大文字と小文字は区別されません。 m = 複数行 (^ と $ は行の境界に一致します)。 s = dotAll (. は改行と一致します)。 u = unicode (パターンを Unicode コード ポイントとして扱います。絵文字とアストラル文字に必要です)。 y = スティッキー (lastIndex でのみ一致)。

例

電子メール アドレスの一致 (実用的、RFC 5322 簡略化)

入力: Pattern: /^[^\s@]+@[^\s@]+\.[^\s@]+$/

出力: 「user@example.com」および「a.b@sub.domain.co」には一致しますが、「plainaddress」または「@no-user.com」には一致しません

CSS からすべての 16 進カラー コードを抽出します

入力: Pattern: /#[0-9a-fA-F]{3,8}\b/g

出力: In 'color: #fff; background: #1a2b3c4d' finds ['#fff', '#1a2b3c4d']

ISO 8601 日付 (YYYY-MM-DD) を検証する

入力: Pattern: /^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])$/

出力: 「2026-08-28」と一致しますが、「2026-13-01」と「2026-02-31」は拒否します

キャプチャ グループを使用して数字を # に置き換えます

入力: 「注文 42 個が出荷されました」を /(\d+)/g →「#$1」に置き換えます

出力: 「注文番号42を発送しました」

よくある問題

  • 貪欲な量指定子の一致が多すぎます: '<a><b>' の '<.*>' は、'<a>' ではなく文字列 '<a><b>' 全体と一致します。最初に '<a>' と一致させるには、'<.*?>' (遅延) を使用します。
  • 壊滅的なバックトラッキング: 入力「aaaaaaaaaaaaaaaa!」における (a+)+b のような入れ子になった量指定子指数関数的に時間がかかる場合があります。パターンを書き直すか、サポートされている場合は原子グループ/所有量指定子を使用します。
  • Unicode の u フラグを忘れた場合: /^.$/ は 1 つのコード単位に一致するため、「😀」 (2 つのコード単位) のような絵文字は u フラグがないと失敗します。アストラル文字と一致する場合は、必ず u を追加してください。
  • \b (単語境界) と \s (空白) の混同: \b は単語と単語以外の文字の間で一致するため、文字列の先頭/末尾でも機能します。 \s は実際の空白文字にのみ一致します。

ヒント

  • 実稼働コードに埋め込む前に、正規表現を正規表現テスターで一致するサンプルと一致しないサンプルの両方に対して必ずテストしてください。エッジ ケースは見落とされやすいためです。
  • 単一文字の代替 (a|b|...|z) よりも文字クラス [a-z] を優先します。クラスはより高速で明確です。
  • キャプチャされた値が必要ない場合は、非キャプチャ グループ (?:...) を使用します。キャプチャするとパフォーマンス コストが小さく、結果の配列が乱雑になります。
  • ホット ループ内ではなく、モジュール スコープで new RegExp() またはリテラルを使用して正規表現を 1 回コンパイルします。反復ごとに同じパターンを再コンパイルすると、CPU が無駄になります。

関連ツール

関連ガイド

参考文献