正規表現で使える特殊文字

正規表現では、任意の1文字があれば一致とするといったパターンも使えます。

本ページでは、正規表現で使える特殊文字について説明します。

正規表現で使う特殊文字

正規表現は、特殊文字を使うことが多くあります。特殊文字を使うと、bが何個か連続すると一致とするいった曖昧なパターン、"ab"の後に"cd"がある時だけ一致とするといった条件付きパターンなどが記述できます。

次からは、以下の順に正規表現で使える特殊文字を説明します。

  1. 文字の種類を対象にする
  2. 文字の数を対象にする
  3. グループ化して判定にする
  4. 条件付きで判定にする
  5. 文字位置を対象にして判定にする

文字の種類を対象にする

文字の種類を対象にする時の特殊文字です。

【文字の種類を対象にする時の特殊文字一覧】
特殊文字 説明
. どの一文字にも一致
\s スペース、タブ、改行など(ホワイトスペース)と一致
\S ホワイトスペース以外と一致
\d 数字と一致
\D 数字以外と一致
\w 英数字、アンダーバー(_)と一致
\W 英数字、アンダーバー(_)以外と一致
\n 改行と一致
\ \の後に続く文字を特殊文字としません。

例えば、/./.test("abc")であればtrueになります。ドット(.)がすべての文字と一致するため、検索対象の文字が何であっても(今回はabcが対象)trueになるためです。

表で最後の\は、特殊文字をエスケープできます。例えば、/\./.test("abc")だとfalseになります。これは、ドットが特殊文字でなくなるためです。/\./.test(".abc")であれば、trueになります。検索対象の".abc"がドットを含むためです。

なお、\(バックスラッシュ)は英語フォントでの表示です。日本語フォントを使うと、\(円マーク)で表示されます。2つの文字コードが同じため、キーボードで同じキーを押しても環境によって表示が異なるためです。どちらで表示されても、特殊文字としての動きは同じです。

文字の数を対象にする

文字の数を対象にする時の特殊文字です。

【文字の数を対象にする時の特殊文字一覧】
特殊文字 説明
* 直前の文字が0回以上あれば一致
+ 直前の文字が1回以上あれば一致
? 直前の文字が0回か1回あれば一致
{n} 直前の文字がn個連続していれば一致
{n,} 直前の文字がn個以上連続していれば一致
{n,m} 直前の文字がnからm個の間で連続していれば一致

例えば、/ab*c/.test("abc")であればtrueになります。/ab*c/.test("ac")でもtrueです。bが0回でも一致するためです。/ab*c/.test("abbc")でもtrueでになります。

また、/ab{1,2}c/.test("abbc")であればtrueになります。/ab{1,2}c/.test("abbbc")では、bが3回続くためfalseになります。

グループ化して判定にする

複数文字をグループ化して判定する時に利用する特殊文字です。

【複数文字をグループ化して判定する時の特殊文字一覧】
特殊文字 説明
[xyz] xyz部分に記述した文字の1つでも同じであれば一致。
a-cなどハイフンを使うと、aからcのどの文字とも一致。
[^xyz] xyz部分に記述した文字のどれも同じでなければ一致。
a-cなどハイフンを使うと、aからcのどの文字とも同じでなければ一致。
(?:x) x部分に記述した文字列を一塊として特殊文字の対象。
(x) x部分に記述した文字列を一塊として特殊文字の対象。
xに一致した文字列は$1などで取り出し可能。

以下は、補足です。

[xyz]
/[1-9]/.test("1ab9")では、[1-9]が1から9のすべてを表すため、"1ab9"の最初の1に一致してtrueになります。[a-z]では英小文字、[A-Z]では英大文字と一致します。
[^xyz]
^はxyzを否定するため、[^1-9]では数字以外、[^a-z]では英小文字以外、[^A-Z]では英大文字以外で一致します。
(?:x)
/(?:ab){2}/.test("abab")は、()内のabを一塊として{2}の対象です。"abab"は"ab"が2回含まれるため、trueになります。()を使わず/ab{2}/.test("abab")とすると、{2}の対象はbだけになります。これは、"abab"でbが2文字続かないため、falseになります。
(x)
/(ab)(cd)\1\2/.test("abcdabcd")では、()内の文字列である"ab"が\1に入り、"cd"が\2に入ります。つまり、\1\2は文字列"abcd"となり、trueになります。また、"abcd".replace(/(ab)(cd)/,'$2$1')では、文字列"cdab"が返されます。$1に"ab"、$2に"cd"を覚えているため、$2$1に置換されて"cdab"となるためです。

条件付きで判定にする

条件付きで判定する時に利用する特殊文字です。

【条件付きで判定する時に利用する特殊文字一覧】
特殊文字 説明
x(?=y) xの後がyの時にxが一致と判定
x(?!y) xの後がyでない時にxが一致と判定
x|y x、またはyが一致

以下は、補足です。

x(?=y)
/ab(?=cd)/.exec("abcd")では、"abcd"がabの後にcdが続くため、abが返されます。/ab(?=cd)/.exec("abef")ではcdが続いていないため、nullが返されます。また、abが出現しない/ab(?=cd)/.exec("agcd")でもnullが返されます。
x(?!y)
/ab(?!cd)/.exec("abef")では、"abef"がabの後にcdが続いていないため、abが返されます。/ab(?!cd)/.exec("abcd")ではcdが続いているため、nullが返されます。また、abが出現しない/ab(?!cd)/.exec("agef")でもnullが返されます。
x|yの補足
/ab|AB/.exec("abcd")では、"abcd"にabが存在するため、abが返されます。/ab|AB/.exec("ABCD")ではABが返されます。

文字位置を対象にして判定にする

文字位置を対象にして判定する特殊文字です。

【文字位置を対象にして判定する特殊文字一覧】
特殊文字 説明
^ 続く文字が先頭文字の時に一致
$ 直前の文字が最後の時に一致
\b 単語間に一致
\B 単語間以外に一致

以下は、補足です。

^
/^a/.test("abc")では、"abc"の先頭がaのため、trueが返されます。/^a/.test("bac")はfalseになります。
$
/c$/.test("abc")では、"abc"の最後がcのため、trueが返されます。/c$/.test("acb")はfalseになります。
\b
/c\b/.test("abc def")では、"abc def"でcの後に半角スペースがある(abcとdefそれぞれ単語と判定される)ため、trueが返されます。/\bd/.test("abc def")は、"abc def"で半角スペースの後にdがあるためtrueが返されます。/d\b/.test("abc def")はfalseになります。
\B
/d\B/.test("abc def")では、"abc def"でdの後は半角スペースではないため、trueが返されます。/c\B/.test("abc def")はfalseになります。

次のページ正規表現で使えるフラグ