正規表現構文早見表

このページでは、RegExp ガイドの記事の内容を集約して、RegExp 構文のすべての機能を網羅した全体的な早見表を提供します。特定のトピックに関する詳細な情報が必要な場合は、対応する見出しのリンクを辿って完全な記事にアクセスするか、ガイドに移動してください。

文字クラス

文字クラスは、文字の種類を判別するものです。例えば、文字と数字を判別することができます。

文字 意味
[xyz]
[a-c]

文字クラス。囲んだ文字のいずれかに一致します。ハイフンを使用して文字の範囲を指定することもできますが、ハイフンが角括弧で囲まれた最初または最後の文字として現れた場合、それは通常の文字として文字クラスに含めるためのリテラルハイフンと見なされます。

例えば、 [abcd][a-d] と同じです。 "brisket" の "b" や "chop" の "c" に一致します。

例えば、 [abcd-][-abcd] は "brisket" の "b"、 "chop" の "c"、そして "non-profit" の "-" (ハイフン)に一致します。

例えば、 [\w-][A-Za-z0-9_-] と同じです。どちらも "brisket" の "b"、 "chop" の "c"、 "non-profit" の "n" に一致します。

[^xyz]
[^a-c]

否定または補完する文字クラス。つまり、括弧で囲まれていないもの全てに一致します。ハイフンを使用して文字の範囲を指定することができますが、ハイフンが ^ の後の最初の文字、または角括弧で囲まれた最後の文字として現れた場合、 それは通常の文字として文字クラスに含めるためにリテラルハイフンと解釈されます。例えば、[^abc][^a-c] と同じです。これらは、最初は "bacon" の "o" や "chop" の "h" に一致します。

メモ: ^ の文字は入力の先頭も意味することがあります。

.

次のいずれかの意味を持ちます。

  • 改行文字 (\n\r\u2028\u2029) を除くあらゆる 1 文字と一致します。例えば、/.y/ は "my" と "ay" に一致し、"yes make my day" の "yes" には一致しません。
  • 文字クラス内では . はその特別な意味を失い、文字通りの "." と一致します。

複数行フラグ (m) は "." の意味を変えないことに注意してください。そのため、複数行にわたるパターンに一致させるには、(IE の古いバージョン以外なら)文字集合 [^] を使うことで、改行を含む任意の文字に一致します。

s "dotAll" フラグは、ドットが改行文字に一致できるようにします。

\d

あらゆる(アラビア)数字に一致します。[0-9] に相当します。例えば /\d//[0-9]/ は "B2 is the suite number" の "2" に一致します。

\D

あらゆる(アラビア)数字以外の文字に一致します。[^0-9] に相当します。例えば /\D//[^0-9]/ は "B2 is the suite number" の "B" に一致します。

\w

アンダースコアを含むあらゆる半角英数字(基本ラテンアルファベット)に一致します。 [A-Za-z0-9_] に相当します。例えば /\w/ は、"apple" の "a"、"$5.28" の "5"、"3D" の "3" に一致します。

\W

基本ラテンアルファベットの文字以外に一致します。 [^A-Za-z0-9_] と同等です。例えば /\W//[^A-Za-z0-9_]/ は、"50%" の "%" や "Émanuel" の "É" に一致します。

\s

ホワイトスペース 1 文字に一致します。例えば空白、タブ、改ページ、改行、その他の Unicode 空白文字などです。 [\f\n\r\t\v\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff] に相当します。例えば /\s\w*/ は "foo bar" の "bar" に一致します。

\S

ホワイトスペース以外の 1 文字に一致します。[^ \f\n\r\t\v\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff] に相当します。例えば /\S\w*/ は "foo bar" の "foo" に一致します。

\t 水平タブに一致します。
\r 復帰文字に一致します。
\n 行送り文字に一致します。
\v 垂直タブに一致します。
\f 改ページに一致します。
[\b] 後退文字に一致します。単語境界文字 (\b) を探す場合はアサーションを参照してください。
\0 NUL 文字に一致します。この後ろに他の数字を続けてはいけません。
\cX

キャレット記法を使用した制御文字に一致します。 "X" には A–Z の文字が入ります(コードポイントU+0001U+001A に対応します)。例えば /\cM\J/ は "\r\n" に一致します。

\xhh hh (2 桁の 16 進数)コードからなる文字に一致します。
\uhhhh hhhh (4 桁の 16 進数)の値からなる UTF-16 コードユニットに一致します。
\u{hhhh} または \u{hhhhh} u フラグがセットされた時のみ) U+hhhh または U+hhhhh (16 進数) Unicode 値からなる文字に一致します。
\

次の文字を特別に扱うこと、「エスケープ」することを示します。 その振る舞いは、2 通りのうちのどちらか 1 つです。

  • 通常文字の前に付けられた場合、次の文字が特別なもので、文字通りには評価されないことを示します。例えば、 /b/ は文字 "b" に一致します。しかし "b" の前にバックスラッシュを置いて \b とすると、単語区切りを意味するようになります。
  • 特殊文字の前に付けられた場合、次の文字が特別なものでなく、文字通りに評価されることを表します。例えば、 "*" は、直前の文字が 0 個以上の出現した場合に一致することを意味する特殊文字です。例えば、 /a*/ は 0 個以上の "a" と一致します。 * と文字通りに照合するには、その直前にバックスラッシュを入れます。例えば、/a\*/ は "a*" と一致します。

なお、 :, -, @, などの一部の文字は、エスケープされたときにもエスケープされていないときにも、特別な意味を持たないことに注意してください。正規表現では \:, \-, \@ のようなエスケープシーケンスは、エスケープされていないリテラル文字と同じになります。しかし、unicode フラグを持つ正規表現では、これらは invalid identity escape エラーが発生します。これは、pkのような新しいエスケープシーケンスを使用する既存のコードとの後方互換性を確保するために行われます。

メモ: この文字を文字通りに一致させるには、それ自身をエスケープしてください。つまり、 \ を検索するには /\\/ を使ってください。

x|y

論理和: "x" または "y" に一致します。パイプ (|) で区切られた各成分は、代替 (alternative)と呼ばれます。例えば、/green|red/ は "green apple" の "green" と "red apple" の "red" に一致します。

メモ: 論理和は「選択肢の集合」を指定するもう一つの方法ですが、文字クラスではありません。論理和は独立したものではありません。大きなパターンの一部にするためにはグループを使用する必要があります。[abc] は機能的には (?:a|b|c) と等価です。

アサーション

アサーションには、行や単語の先頭と末尾を示す境目、他にも何らかの形で一致が可能であることを示すパターン(先読み、後読み、条件式など)が含まれます。

境界型のアサーション

文字 意味
^

入力の先頭に一致します。複数行フラグが true にセットされている場合は、改行文字の直後にも一致します。例えば /^A/ は "an A" の 'A' には一致しませんが、"An E" の 'A' には一致します。

メモ: この文字は、文字クラスパターンの先頭にある場合は異なる意味を持ちます。

$

入力の末尾に一致します。複数行フラグが true にセットされている場合は、改行文字の直前にも一致します。例えば /t$/ は "eater" の "t" には一致しませんが、"eat" の "t" には一致します。

\b

単語の区切りに一致します。これは、単語構成文字と後に続く非単語構成文字の間、または非単語構成文字と後に続く単語構成文字の間、または文字列の先頭・末尾です。単語の区切りは一致する「文字」ではありません。アンカーのように、単語の区切りは一致した部分に含まれません。言い換えると、一致した単語の区切りの長さは 0 です。

例:

  • /\bm/ は "moon" の "m" に一致します。
  • /oo\b/ は "moon" の "oo" に一致しません。これは "oo" の 後に単語構成文字である "n" が続いているためです。
  • /oon\b/ は "moon" の "oon" に一致します。これは、文字列の終端であるためです。
  • /\w\b\w/ はどこにも一致しないでしょう。単語構成文字の後に非単語構成文字と単語構成文字の両方が続くことはありえないからです。

バックスペース文字 ([\b]) については文字クラスを見てください。

\B

単語以外の境界に一致します。これは、前の文字と次の文字が同じ種類である位置のことです。どちらも単語でなければならないか、または、 2 つの文字の間や 2 つの空白の間など、どちらも非単語でなければなりません。文字列の先頭と末尾は、非単語とみなされます。一致した単語の境界と同じように、一致した非単語の境界も一致に含まれません。例えば、 /onBon/ は "at noon" の "on" に、 /ye}B/ は "possibly yesterday" の "ye" に一致します。

その他のアサーション

メモ: ? の文字は数量詞としても使用されます。

文字 意味
x(?=y)

先読みアサーション: "x" の後に "y" が続く場合のみ "x" に一致します。例えば、/Jack(?=Sprat)/ は "Jack" の後に "Sprat" が続く場合のみ一致します。
/Jack(?=Sprat|Frost)/ は "Jack" の後に "Sprat" または "Frost" が続く場合のみ一致します。しかし、 "Sprat" も "Frost" も一致した結果には含まれません。

x(?!y)

否定先読みアサーション: "x" の後に "y" が続いていない場合のみ "x" に一致します。例えば、 /\d+(?!\.)/ は数字の後に小数点が続かない場合のみ一致します。/\d+(?!\.)/.exec('3.141')は "141" には一致しますが、 "3" には一致しません。

(?<=y)x

後読みアサーション: "x" の前に "y" がある場合のみ "x" に一致します。例えば、/(?<=Jack)Sprat/ は、 "Jack" が先行する場合のみ、 "Sprat" に一致します。 /(?<=Jack|Tom)Sprat/ は、 "Jack" か "Tom" が先行する場合のみ、 "Sprat" に一致します。しかし、 "Jack" も "Tom" も一致した結果には含まれません。

(?<!y)x

否定後読みアサーション: "x" の前に "y" がない場合のみ "x" に一致します。例えば、 /(?<!-)\d+/ は、数字の前にマイナス記号がない場合のみ、数字に一致します。 /(?<!-)\d+/.exec('3') は "3" に一致します。 /(?<!-)\d+/.exec('-3') では数字の前にマイナス記号があるため、一致するものは見つかりません。

グループと後方参照

グループと後方参照は、式の文字のグループを示します。

文字 意味
(x)

キャプチャグループ: x に一致し、一致した内容を記憶します。例えば /(foo)/ は "foo bar" の "foo" に一致し、記憶します。

正規表現は複数のキャプチャグループを持つことができます。結果、一般的にキャプチャグループ内の左括弧と同じ順にある、配列の要素のキャプチャグループに一致しています。たいていの場合、これはキャプチャグループ自身の順番です。これはキャプチャグループがネストしている場合に重要です。一致は結果の要素の添字 ([1], …, [n]) や、あらかじめ定義されている RegExp オブジェクトのプロパティ ($1, …, $9) を使ってアクセスできます。

キャプチャグループはパフォーマンス上の損失があります。一致した部分文字列を使わない場合はキャプチャしない括弧(後述)を使ったほうがいいでしょう。

String.prototype.match() は、/.../g フラグが設定されている場合、グループを返しません。しかし、 String.prototype.matchAll() を使用して、すべての一致したものを取得することができます。

(?<Name>x)

名前付きキャプチャグループ: "x" に一致し、<Name> で指定された名前に従い、返される一致の groups プロパティに記憶されます。山括弧 ('<' と '>') にはグループ名が必須です。

例えば、電話番号からアメリカのエリアコードを取り出す際、 /\((?<area>\d\d\d)\)/ を使うことができます。 結果の番号は matches.groups.area に表示されます。

(?:x) 非キャプチャグループ: "x" に一致しますが、一致した内容は記憶しません。一致した部分文字列は、結果の配列の要素 ([1], …, [n]) や、あらかじめ定義されている RegExp オブジェクトのプロパティ ($1, …, $9) から呼び出すことはできません。

\n

"n" に正の整数が入ります。正規表現内において n 番目の括弧の部分に一致した最新の部分文字列への後方参照となります(括弧の数は左からカウントします)。例えば /apple(,)\sorange\1/ は "apple, orange, cherry, peach" の "apple, orange," に一致します。

\k<Name>

<Name> で指定された名前付きキャプチャグループに一致する最後の部分文字列の後方参照です。

例えば、 /(?<title>\w+), yes \k<title>/ は、 "Do you copy? Sir, yes Sir!" の中の "Sir, yes Sir" に一致します。

メモ: \k は、ここでは、名前付きキャプチャグループの後方参照を開始することを示すために使用されています。

数量詞

数量詞は、一致する文字や表現の数を示します。

メモ: 以下の表の中で、アイテムは単一の文字だけでなく、文字クラスUnicode プロパティエスケープグループと後方参照を示すこともあります。

文字 意味
x*

直前のアイテム "x" の 0 回以上の繰り返しに一致します。例えば /bo*/ は "A ghost booooed" の "boooo" や "A bird warbled" の "b" に一致しますが、 "A goat grunted" には一致しません。

x+

直前のアイテム "x" の 1 回以上の繰り返しに一致します。{1,} と同等です。例えば /a+/ は "candy" の "a" や "caaaaaaandy" のすべての "a" に一致します。

x?

直前のアイテム "x" の 0 回か 1 回の出現に一致します。例えば /e?le?/ は "angel" の "el" や "angle" の "le" に一致します。

*+?{} といった数量詞の直後に使用した場合、既定とは逆に、その数量詞を非貪欲(出現回数が最小のものに一致)とします。既定は貪欲(出現回数が最大のものに一致)です。

x{n}

"n" には正の整数が入ります。直前のアイテム "x" がちょうど "n" 回出現するものに一致します。例えば /a{2}/ は "candy" の "a" には一致しませんが、"caandy" のすべての "a"、"caaandy" の最初の 2 つの "a" に一致します。

x{n,}

"n" には正の整数が入ります。直前のアイテム "x" の少なくとも "n" 回の出現に一致します。例えば、/a{2,}/ は "candy" の "a" には一致しませんが、"caandy" や "caaaaaaandy" の "a" のすべてに一致します。

x{n,m}

"n" には 0 と正の整数が、 "m" には "n" より大きい正の整数が入ります。直前のアイテム "x" が少なくとも "n" 回、多くても "m" 回出現するものに一致します。例えば /a{1,3}/ は "cndy" では一致せず、"candy" の 'a'、"caandy" の 最初の 2 個の "a"、"caaaaaaandy" の最初の 3 個の "a" に一致します。"caaaaaaandy" では元の文字列に "a" が 4 個以上ありますが、一致するのは "aaa" であることに注意してください。

x*?
x+?
x??
x{n}?
x{n,}?
x{n,m}?

既定では *+ といった数量詞は貪欲です。つまり、できる限り多くの文字列と一致しようとします。数量詞の後に ? の文字を指定すると、数量詞が「非貪欲」になります。つまり、一致が見つかるとすぐに停止します。例えば、"some <foo> <bar> new </bar> </foo> thing" といった文字列が与えられた場合は、

  • /<.*>/ は "<foo> <bar> new </bar> </foo>" に一致します。
  • /<.*?>/ は "<foo>" に一致します。

Unicode プロパティエスケープ

Unicode プロパティエスケープでは、 Unicode プロパティに基づいた文字の照合を行うことができます。

js
// バイナリー値でないもの
/\p{UnicodePropertyValue}/
/\p{UnicodePropertyName=UnicodePropertyValue}/

// バイナリー値と非バイナリー値
/\p{UnicodeBinaryPropertyName}/

// 否定: \P は \p の否定
/\P{UnicodePropertyValue}/
/\P{UnicodeBinaryPropertyName}/
UnicodeBinaryPropertyName

バイナリープロパティの名前。例えば、 ASCII, Alpha, Math, Diacritic, Emoji, Hex_Digit, Math, White_space, など。詳しくは Unicode Data PropList.txt を参照してください。

UnicodePropertyName

非バイナリープロパティの名前です。

PropertyValueAliases.txt も参照してください。

UnicodePropertyValue

下記の「値」の節に掲載されているトークンの 1 つです。多くの値には、別名や短縮形があります(例えば General_Category プロパティの値 Decimal_NumberNd, digit, Decimal_Number と書くことができます)。ほとんどの値では、 UnicodePropertyName の部分と等号を省略することができます。 UnicodePropertyName を指定した場合、その値は指定されたプロパティの種類に対応するものでなければなりません。

メモ: 利用できるプロパティと値は膨大であるため、ここでは網羅的に記述することはせず、様々な例を提供することにします。