正規表現の構文

更新 : 2007 年 11 月

正規表現は、通常の文字 (a ~ z など) と、"メタ文字" という特殊文字で構成される文字列のパターンです。パターンによって、テキストを検索するときに一致する 1 つ以上の文字列を指定します。

正規表現の例

正規表現

一致する内容

/^\s*$/

空行に一致します。

/\d{2}-\d{5}/

2 桁の数字、ハイフン、および 5 桁の数字で構成される ID 番号を検査します。

/<\s*(\S+)(\s[^>]*)?>[\s\S]*<\s*\/\1\s*>/

HTML タグに一致します。

次の表は、メタ文字の全リストと、正規表現におけるメタ文字の動作を示しています。

文字

説明

\

次に続く文字が特殊文字、リテラル、前方参照、または 8 進エスケープであることを示します。たとえば、'n' は文字 "n" と一致しますが、'\n' は改行文字と一致します。'\\' は "\" と、"\(" は "(" と一致します。

^

入力文字列の先頭と一致します。RegExp オブジェクトの Multiline プロパティが設定されている場合は、'\n' または '\r' の直後とも一致します。

$

入力文字列の末尾と一致します。RegExp オブジェクトの Multiline プロパティが設定されている場合は、'\n' または '\r' の直前とも一致します。

*

直前の文字または部分式と 0 回以上一致します。たとえば、zo* は "z" と "zoo" のどちらにも一致します。* は {0,} と同じ意味です。

+

直前の文字または部分式と 1 回以上一致します。たとえば、'zo+' は "zo" や "zoo" とは一致しますが、"z" とは一致しません。+ は {1,} と同じ意味です。

?

直前の文字または部分式と 0 回または 1 回一致します。たとえば、"do(es)?" は "do" または "does" の "do" と一致します。? は {0,1} と同じ意味です。

{n}

n には、0 以上の整数を指定します。直前の文字と正確に n 回一致します。たとえば、'o{2}' は "Bob" の 'o' とは一致しませんが、"food" の 2 つの 'o' とは一致します。

{n,}

n には、0 以上の整数を指定します。少なくとも n 回一致します。たとえば、'o{2,}' は "Bob" の "o" とは一致しませんが、"foooood" のすべての "o" とは一致します。'o{1,}' は 'o+' と同じ意味です。'o{0,}' は 'o*' と同じ意味です。

{n,m}

m および n には 0 以上の整数を指定します。nm 以下です。nm 回一致します。たとえば、"o{1,3}" は "fooooood" の最初の 3 つの "o" と一致します。'o{0,1}' は 'o?' と同じ意味です。コンマと数の間には空白を入れません。

?

他の量指定子 (*, +, ?, {n}, {n,}, {n,m}) の直後に指定すると、一致パターンが最短一致になります。既定のパターンでは、できるだけ多くの文字列と一致するのに比べて、最短一致パターンでは、できるだけ少ない文字列と一致します。たとえば、文字列 "oooo" に対して、'o+?' を指定すると 1 つの "o" と一致し、'o+' を指定するとすべての "o" と一致します。

.

"\n" を除く任意の 1 文字に一致します。'\n' を含めて任意の文字と一致させるには、'[\s\S]' などのパターンを指定します。

(pattern)

pattern と一致した文字列を記憶する部分式です。一致する文字列が見つかったら記憶され、その部分は Matches コレクションから $0…$9 プロパティを使用して取得できます。かっこ ( ) と一致させるには、'\(' または '\)' を指定します。

(?:pattern)

pattern と一致しても、その文字列が記憶されない部分式です。後で使用できません。"または" を意味する (|) を使用して、パターンの一部を結合するときに便利です。たとえば、"industry|industries" と指定する代わりに、"industr(?:y|ies)" と指定する方が簡潔です。

(?=pattern)

肯定先読みを実行する部分式です。pattern に一致する文字列が始まる位置にある検索文字列と一致します。一致した文字列は記憶されず、後で使用することはできません。たとえば "Windows (?=95|98|NT|2000)" は、"Windows 2000" の "Windows" には一致しますが、"Windows 3.1" の "Windows" には一致しません。先読み処理では、読み進まれた文字は処理済みとは見なされません。一致の検出後、次の検索処理は先読みされた文字列の後からではなく、一致文字列のすぐ後から開始されます。

(?!pattern)

否定先読み検索を実行する部分式です。pattern に一致しない文字列が始まる位置にある検索文字列と一致します。一致した文字列は記憶されず、後で使用することはできません。たとえば "Windows (?!95|98|NT|2000)" は、"Windows 3.1" の "Windows" には一致しますが、"Windows 2000" の "Windows" には一致しません。先読み処理では、読み進まれた文字は処理済みとは見なされません。一致の検出後、次の検索処理は先読みされた文字列の後からではなく、一致文字列のすぐ後から開始されます。

x|y

x または y と一致します。たとえば、"z|food" は "z" または "food" と一致します。"(z|f)ood" は、"zood" または "food" に一致します。

[xyz]

文字セットを指定します。角かっこで囲まれた文字のいずれかに一致します。たとえば、'[abc]' は "plain" の 'a' と一致します。

[^xyz]

除外する文字セットを指定します。角かっこで囲まれた文字以外の文字に一致します。たとえば、'[^abc]' は "plain" の 'p' と一致します。

[a-z]

文字の範囲を指定します。指定した範囲に含まれる任意の文字に一致します。たとえば、'[a-z]' は小文字の英字 a ~ z の範囲にある任意の文字と一致します。

[^a-z]

否定の文字の範囲を指定します。指定した範囲に含まれていない任意の文字に一致します。たとえば、'[^a-z]' は小文字の英字 a ~ z の範囲外にある任意の文字と一致します。

\b

単語の境界と一致します。単語の境界とは、単語と空白との間の位置のことです。たとえば、'er\b' は "never" の 'er' と一致しますが、"verb" の 'er' とは一致しません。

\B

単語の境界以外と一致します。たとえば、'er\B' は "verb" の 'er' と一致しますが、"never" の 'er' とは一致しません。

\cx

x で指定した制御文字と一致します。たとえば、\cM は Control-M または復帰文字と一致します。x の値は、A ~ Z または a ~ z の範囲内で指定します。それ以外を指定すると、リテラル文字 'c' と認識されます。

\d

任意の 10 進文字と一致します。[0-9] と同じ意味です。

\D

10 進数字以外の任意の文字と一致します。[^0-9] と同じ意味です。

\f

フォーム フィード文字と一致します。\x0c および \cL と同じ意味です。

\n

改行文字と一致します。\x0a および \cJ と同じ意味です。

\r

キャリッジ リターン文字と一致します。\x0d および \cM と同じ意味です。

\s

空白、タブ、フォーム フィードなどの任意の空白文字と一致します。[ \f\n\r\t\v] と同じ意味です。

\S

空白文字以外の任意の文字と一致します。[^ \f\n\r\t\v] と同じ意味です。

\t

タブ文字と一致します。\x09 および \cI と同じ意味です。

\v

垂直タブ文字と一致します。\x0b および \cK と同じ意味です。

\w

単語に使用される任意の文字と一致します。アンダースコアも含まれます。'[A-Za-z0-9_]' と同じ意味です。

\W

単語に使用される文字以外の任意の文字と一致します。'[^A-Za-z0-9_]' と同じ意味です。

\xn

n (16 進数のエスケープ値) と一致します。16 進数のエスケープ値は 2 桁である必要があります。たとえば、'\x41' は "A" と一致します。'\x041' は '\x04' および "1" と同じ意味です。この表記により、正規表現で ASCII コードを使用できるようになります。

\num

num (正の整数) と一致します。既に見つかって記憶されている部分を参照します。たとえば、'(.)\1' は、連続する 2 つの同じ文字と一致します。

\n

8 進数のエスケープ値または前方参照を指定します。\n の前に少なくとも n 個の記憶された部分式がある場合、n は前方参照になります。それ以外の場合で n が 8 進数値 (0 ~ 7) である場合は、n は 8 進エスケープ値です。

\nm

8 進数のエスケープ値または前方参照を指定します。\nm の前に少なくとも nm 個の記憶された部分式がある場合、nm は前方参照になります。\nm の前に少なくとも n 個の記憶された部分式がある場合は、n が前方参照で、リテラル m が後に続きます。どちらの条件にも当てはまらない場合で n および m が 8 進数 (0 ~ 7) である場合、\nm は 8 進数のエスケープ値 nm と一致します。

\nml

n が 8 進数値の 0 ~ 3 で、ml が 8 進数値 (0 ~ 7) の場合は、8 進エスケープ値 nml と一致します。

\un

n と一致します。n には Unicode 文字で表した 4 桁の 16 進数を指定します。たとえば、\u00A9 は著作権の記号 (©) と一致します。

参照

その他の技術情報

正規表現の概説