JavaScriptの正規表現でエスケープが必要な文字列の一覧を紹介!
JavaScriptの正規表現では.?+\[]{}など特殊な意味を持つ記号があり、この記号はエスケープしないと正規表現の処理が正常に行えない場合があります。エスケープが必要な文字の一覧をご紹介します。
JavaScriptで正規表現の特殊文字をエスケープする方法
JavaScriptで正規表現を利用する場合は判定用の文字列をエスケープしないと正常に動作しない場合があります。
例えば.*+$-[]{}?
のような記号は正規表現では特別な意味を持った文字で、判定用の文字列の中にこれらの記号がそのままあると、上手く正規表現が処理できない事があります。
そのため対象の文字列の中に上記の記号のような特殊文字があれば下記のようなエスケープ処理が必要になります。
正規表現リテラルの場合のエスケープ処理
"test".match(/?/)
のような正規表現リテラルでの書き方の場合エスケープするにはバックスラッシュを1つその文字の前に記述します。
正規表現リテラルの場合のエスケープ
"test".match(/\?/)
/* ⇒null */
もし上記のコードでバックスラッシュでエスケープをしなければ、?
は正規表現で特別な意味を持つち、直前の文字の0 回か1回の出現にマッチするかどうかを判定します。
文字列リテラル(new RegExp)の場合のエスケープ処理
判定用の文字を文字列として渡す、つまり文字列リテラルでの書き方の場合はエスケープするにはバックスラッシュが2つ必要なので注意が必要です。
文字列リテラルの場合のエスケープ
"test".match(new RegExp("\\?"))
/* ⇒ null */
正規表現でエスケープが必要な文字列の一覧
それでは次にJavaScriptの正規表現でエスケープが必要になる文字列の一覧を紹介していきます。
もしもこれから紹介する文字をそのままの文字として判定したい場合は前章で紹介したエスケープ処理が必要となります。
文字 |
名前 |
エスケープ後 |
---|---|---|
\ | バックスラッシュ | \\ |
/ | スラッシュ | \/ |
* | アスタリスク | \* |
+ | プラス | \+ |
. | ドット | \. |
? | クエスチョンマーク | \? |
^ | キャレット | \^ |
$ | ドル | \$ |
- | ハイフン | \- |
{} | カーリーブラケット(波括弧) | \{\} |
[] | スクエアブラケット(角括弧) | \[\] |
() | パーレン(丸括弧) | \(\) |
| | パイプ | \| |
正規表現で必要な文字をエスケープする関数
最後に今回紹介した正規表現で特殊な意味を持つ文字を全てエスケープさせる関数をご紹介します。
正規表現で特殊な意味を持つ文字をエスケープする関数
function escapeRegExp(string) {
return string.replace(/[.*+\-?^${}()|[\]\\]/g, '\\$&');
}
上記の関数を利用したサンプルコードは下記の通りです。
.
や?
など正規表現で特殊な意味を持つ文字がちゃんとエスケープされているのが確認出来ます。