文字クラスは、文字の種類を判別するものです。例えば、文字と数字を判別することができます。
文字 | 意味 |
[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" には一致しません。 dotAll フラグ (s) が有効な場合は、改行文字にも一致します。 文字クラス内では . はその特別な意味を失い、文字通りの "." と一致します。 |
\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"、"Émanuel" の "e" に一致します。 |
\W | 非英数文字クラスエスケープ: 基本ラテンアルファベットの文字以外に一致します。 [^A-Za-z0-9_] と同等です。例えば /\W/ や /[^A-Za-z0-9_]/ は、"50%" の "%" や "Émanuel" の "É" に一致します。 |
\s | ホワイトスペース文字クラスエスケープ: ホワイトスペース文字、例えば空白、タブ、改ページ、改行、その他の Unicode 空白文字などの 1 文字に一致します。 [\f\n\r\t\v\u0020\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff] に相当します。例えば /\s\w*/ は "foo bar" の "bar" に一致します。 |
\S | 非ホワイトスペース文字クラスエスケープ: ホワイトスペース以外の 1 文字に一致します。 [^\f\n\r\t\v\u0020\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+0001 –U+001A に対応します)。例えば /\cM\J/ は "\r\n" の "\r" に一致します。 |
\xhh | hh (2 桁の 16 進数)コードからなる文字に一致します。 |
\uhhhh | hhhh (4 桁の 16 進数)の値からなる UTF-16 コードユニットに一致します。 |
\u{hhhh} または \u{hhhhh} | (u フラグがセットされた時のみ) U+hhhh または U+hhhhh (16 進数) Unicode 値からなる文字に一致します。 |
\p{UnicodeProperty} , \P{UnicodeProperty} | Unicode 文字クラスエスケープ: Unicode 文字プロパティに基づいた文字に一致します。例えば、絵文字、日本語のカタカナ、中国語や日本語の漢字などです。 |
\ | 次の文字を特別に扱うこと、「エスケープ」することを示します。 その振る舞いは、2 通りのうちのどちらか 1 つです。 - 通常文字の前に付けられた場合、次の文字が特別なもので、文字通りには評価されないことを示します。例えば、
/b/ は文字 "b" に一致します。しかし "b" の前にバックスラッシュを置いて \b とすると、単語区切りを意味するようになります。 - 特殊文字の前に付けられた場合、次の文字が特別なものでなく、文字通りに評価されることを表します。例えば、 "*" は、直前の文字が 0 個以上の出現した場合に一致することを意味する特殊文字です。例えば、
/a*/ は 0 個以上の "a" と一致します。 * と文字通りに照合するには、その直前にバックスラッシュを入れます。例えば、/a\*/ は "a*" と一致します。 メモ: この文字を文字通りに一致させるには、それ自身をエスケープしてください。つまり、 \ を検索するには /\\/ を使ってください。 |
x|y | 論理和: "x" または "y" に一致します。パイプ (| ) で区切られた各成分は、代替 (alternative)と呼ばれます。例えば、/green|red/ は "green apple" の "green" と "red apple" の "red" に一致します。 メモ: 論理和は「選択肢の集合」を指定するもう一つの方法ですが、文字クラスではありません。論理和は独立したものではありません。大きなパターンの一部にするためにはグループを使用する必要があります。[abc] は機能的には (?:a|b|c) と等価です。 |
アサーションには、行や単語の先頭と末尾を示す境目、他にも何らかの形で一致が可能であることを示すパターン(先読み、後読み、条件式など)が含まれます。
文字 | 意味 |
^ | 入力開始境界アサーション: 入力の先頭に一致します。複数行フラグ (multiline , m) が有効である場合、改行文字の直後にも一致します。例えば /^A/ は "an A" の "A" には一致しませんが、"An A" の先頭の "A" には一致します。 メモ: この文字は、文字クラスパターンの先頭にある場合は異なる意味を持ちます。 |
$ | 入力末尾境界アサーション: 入力の末尾に一致します。複数行フラグ (multiline , m) が有効である場合、は、改行文字の直前にも一致します。例えば /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 ) から呼び出すことはできません。 |
(?flags:x) , (?:flags-flags:x) | 修飾子: 指定したフラグを、囲まれたパターンに対してのみ有効または無効にします。修飾子では、i 、m 、s フラグのみ使用できます。 |
\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 は、ここでは、名前付きキャプチャグループの後方参照を開始することを示すために使用されています。 |
数量子は、一致する文字や表現の数を示します。
文字 | 意味 |
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" と "m" は非負の整数で、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>" に一致します。 |