Javascript : 正規表現 の エスケープ について
-
. * + ^ | [ ] ( ) ? $ { }などの文字を文字列として正規表現の判定内で使いたい場合エスケープしなければならない。 - 正規表現リテラルで表す場合は、スラッシュ
/もエスケープしなければ区切り文字として認識されるので気をつける。
文字列リテラル(new RegExp("~")) の場合は、バックスラッシュは2つ必要。
"\\." "\\*" "\\+" ... となる。
下記の例では、バックスラッシュは1つでエスケープしたものは、文字列の「.」としてみなされず、正規表現のドット(改行文字以外のどの 1 文字にもマッチ)として判定される。[X]
"a".match(new RegExp("\."))
-> ["a"]
バックスラッシュ2つの場合は、ドットが文字列として認識されるので、下記の例で "a" とはマッチしない。[◯]
"a".match(new RegExp("\\."))
-> null
正規表現リテラルの場合は、バックスラッシュは1つでよい。
match(/~/)
"\." "\*" "\+" ... となる。
下記の例は、正規表現リテラルでドット(改行文字以外のどの 1 文字にもマッチ)を表したもので、"a" とマッチする。
"a".match(/./)
-> ["a"]
下記の例は、ドットを文字列としてエスケープしているので、"a" とはマッチしない。
"a".match(/\./)
-> null