JavaScript の正規表現の書式

© 2006 Magicant / (2006-07-20)
X|Y

XY のどちらかにマッチする。例えば abc|defabcdef のどちらかにマッチし、abcdef にはマッチしない。

マッチ検索は Y より X が優先される。 例えば abc|abcdef というパターンは、マッチ対象 abcdefghi の中の abc にマッチし、abcdef にはマッチしない。

^X

X がマッチ対象の先頭に位置する場合にマッチする。例えば ^def というパターンは、マッチ対象 defghi の中の def にはマッチするが、マッチ対象 abcdefghi の中の def にはマッチしない。

複数行マッチ時は、X が行頭にある場合にもマッチする。つまり、 line feed (U+000A), carriage return (U+000D), line separator (U+2028), paragraph separator (U+2029) の直後にある X にもマッチする。

X$

X がマッチ対象の末尾に位置する場合にマッチする。例えば def$ というパターンは、マッチ対象 abcdef の中の def にはマッチするが、マッチ対象 abcdefghi の中の def にはマッチしない。

複数行マッチ時は、X が行末にある場合にもマッチする。つまり、 line feed (U+000A)、carriage return (U+000D)、line separator (U+2028)、 paragraph separator (U+2029) の直前にある X にもマッチする。

x\by

xy のどちらかが単語文字であり、もう一方が単語文字でない場合にマッチする。

例えば、\bdef\b というパターンは、マッチ対象 abc-def-ghi の中の def にはマッチするが、 abcdefghi の中の def にはマッチしない。

x\By

xy の両方が単語文字であるか、どちらも単語文字でない場合にマッチする。

例えば、\Bdef\B というパターンは、マッチ対象 abcdefghi の中の def にはマッチするが、 abc-def-ghi の中の def にはマッチしない。

x*

0 文字以上の x にマッチする。

x+

1 文字以上の x にマッチする。

x?

0 文字または 1 文字の x にマッチする。

x{a}

a 文字の x にマッチする。

x{a,}

a 文字以上の x にマッチする。

x{a,b}

a 文字以上 b 文字以下の x にマッチする。

無欲化: ?

x*x+x?x{a}x{a,}x{a,b} の直後に ? を置くことで、反復量指定子を無欲化することができる。

反復量指定子を無欲化すると、できるだけ少ない回数の反復にマッチしようとする。 反復量指定子を無欲化しないと (貪欲な反復量指定子)、できるだけ多い回数の反復にマッチしようとする。

例えば、マッチ対象 abcabcabc に対して、 a[a-z]*c というパターンは abcabcabc にマッチするが、 a[a-z]*?c というパターンは abc にマッチする。

.

. は改行文字以外の任意の 1 文字にマッチする。

\1\2\3

\1\2 はそれぞれ 1 番目、2 番目の捕捉括弧の内容を表す。例えば、 (a+)(b+)c\2\1 というパターンは abbcbbaaaabcbaaa にマッチする。

\0

\0 は null 文字 (U+0000) にマッチする。

\t

\t は horizontal tab 文字 (U+0009) にマッチする。

\n

\n は line feed 文字 (U+000A) にマッチする。

\v

\v は vertical tab 文字 (U+000B) にマッチする。

\f

\f は form feed 文字 (U+000C) にマッチする。

\r

\r は carriage return 文字 (U+000D) にマッチする。

\d

\d は、0 から 9 までの数字のどれか一つにマッチする。

\D

\D は、0 から 9 までの数字以外の文字一つにマッチする。

\s

\s は、一つの空白文字または改行文字にマッチする。

\S

\S は、空白文字および改行文字以外の文字一つにマッチする。

\w

\w は、単語文字のどれか一つにマッチする。

\W

\W は、単語文字以外の文字一つにマッチする。

\cA\cB\cC

\cA は文字 U+0001 に、\cB は文字 U+0002 に、 \cC は文字 U+0003 にマッチする。以下、\cZまで同様。

\ca\cb\cc…は \cA\cB\cC…と同じである。

\xAB

\xAB は文字 U+00AB にマッチする。 ただし、AB はそれぞれ十六進法の数字の一桁。

\uABCD

\uABCD は文字 U+ABCD にマッチする。 ただし、ABCD はそれぞれ十六進法の数字の一桁。

\<記号>

\<記号> はその <記号> にマッチする。

[文字列]

[文字列]文字列 に含まれるどれか一つの文字にマッチする。

文字列 の中に x-y が含まれる場合、 それは Unicode コードポイントにおいて x から y までの全ての文字を表す。 例えば、[a-d][abcd] と同じであり、 [a-dghp-s-][abcdghpqrs-] と同じである。

文字列 の中に \b が含まれる場合、それは backspace 文字 (U+0008) を意味する。文字列 の中では \B および \1\2\3…は使えない。

文字列 の中に記号 ] を含めるには、\] とエスケープする。 文字列 の中では、上記例外を除いて \ で始まる各エスケープが使える。

[^文字列]

[^文字列]文字列 に含まれないどれか一つの文字にマッチする。

(X)

(X)X を一つの文字として扱うと同時に、 捕捉括弧を生成する。

例えば、(abc){3} というパターンは abcabcabc にマッチする。

(?:X)

(?:X)X を一つの文字として扱う。 しかし捕捉括弧は生成しない。

(?=X)Y

(?=X)YY の先頭部分が X にマッチするような Y にマッチする。

例えば、(?=a)\w{3} というパターンは、 abcayz にはマッチするが Abcxyz にはマッチしない。

(?=X) は捕捉括弧を生成しない。

(?!X)Y

(?!X)YY の先頭部分が X にマッチしないような Y にマッチする。

例えば、(?!a)\w{3} というパターンは、 Abcxyz にはマッチするが abcayz にはマッチしない。

(?!X) は捕捉括弧を生成しない。

文字の種類

空白文字

空白文字とは、horizontal tab (U+0009)、vertical tab (U+000B)、form feed (U+000C)、 space (U+0020)、no-break space (U+00A0)、およびその他の Unicode カテゴリ Zs の文字である。

改行文字

改行文字とは、line feed (U+000A)、carriage return (U+000D)、line separator (U+2028)、 paragraph separator (U+2029) の四つである。

単語文字

単語文字とは、0 から 9 までの数字、a から z までと A から Z までのアルファベット、および下線記号 _ のどれかである。

パターン文字でない文字

以下の記号はパターン文字ではないので、正規表現の中では特殊な役割を果たす。 これらの記号を単なる文字として扱うには、エスケープが必要。

パターン文字でない文字
^$\.*+?()[]{}|

また、正規表現リテラルの中では、/ もエスケープが必要。