文字エスケープ: \n, \u{...}
文字エスケープは、リテラルの形ではうまく表現できない文字を表します。
構文
\f, \n, \r, \t, \v
\cA, \cB, …, \cz
\0
\^, \$, \\, \., \*, \+, \?, \(, \), \[, \], {, }, \|, \/
\xHH
\uHHHH
\u{HHH}
メモ: ,
は構文の一部ではありません。
引数
HHH
-
文字の Unicode コードポイントを表す 16 進数です。
xHH
形式の場合は 16 進数 2 桁、uHHHH
形式の場合は 4 桁、\u{HHH}
形式の場合は 16 進数 1 桁から 6 桁を持つことができます。
解説
以下の文字エスケープが正規表現内で認識されます。
\f
,\n
,\r
,\t
,\v
\c
にA
からZ
またはa
からz
が続いたもの-
32 で割った余りに等しい値の制御文字を表します。例えば、
J
のコードポイントは 74 であり、74 を 32 で割ると改行のコードポイントである 10 であるため、cJ
は改行 (\n
) を表します。大文字と小文字の形式は 32 だけ異なるので、\cJ
と\cj
は等価です。この形で 1 から 26 までの制御文字を表すことができます。 \0
-
U+0000 NUL 文字を表します。数字を続けてはいけまません(古い 8 進数エスケープシーケンスになります)。
\^
,\$
,\\
,\.
\*
,\+
,\?
,\(
,\)
,\[
,\]
,{
,}
,\|
,\/
-
文字自体を表します。例えば、
\\
はバックスラッシュを表し、\(
は左括弧を表します。これらは正規表現内(/
は正規表現リテラルの区切り文字です)では構文文字であるため、文字クラス内でない場合はエスケープする必要があります。 \xHH
-
指定された Unicode コードポイントを持つ文字を表します。16 進数は正確に 2 桁でなければなりません。
\uHHHH
-
指定された Unicode コードポイントを持つ文字を表します。16 進数は正確に 4 桁でなければなりません。このようなエスケープシーケンス 2 つで、Unicode 対応モードではサロゲートペアを表すのに使用することができます。(Unicode 非対応モードでは常に 2 つの別個の文字になります。)
\u{HHH}
-
(Unicode 対応モードのみ)指定された Unicode コードポイントを持つ文字を表します。16 進数は 1 桁から 6 桁までです。
Unicode 非対応モードでは、上記のいずれでもないエスケープシーケンスは識別エスケープになります。これらはバックスラッシュに続く文字を表します。例えば、\a
は文字 a
を表します。この動作は後方互換性の問題を発生させることなく新しいエスケープシーケンスを導入す る能力を制限するため、Unicode 対応モードでは禁止されています。
Unicode 非対応モードでは、]
、{
、}
は文字クラスの末尾や数量詞の区切り文字として解釈できない場合、文字通りに現れることがあります。これはウェブの互換性のために非推奨です。
Unicode 非対応モードでは、文字クラス内の \cX
という形のエスケープシーケンスで、X
が数字または _
である場合、ASCII 文字と同じようにデコードされます。\c0
は 32 で割った余りを取って \cP
と同じになります。さらに、\cX
に遭遇したとき X
が認識された文字の一つでなかった場合、バックスラッシュはリテラル文字として扱われます。これらの構文も非推奨です。
/[\c0]/.test("\x10"); // true
/[\c_]/.test("\x1f"); // true
/[\c*]/.test("\\"); // true
/\c/.test("\\c"); // true
/\c0/.test("\\c0"); // true (\c0 文字は文字クラス内でのみ対応しています)
例
文字エスケープの使用
文字エスケープは、リテラル形式では表しにくい文字と照合したいときに有益です。例えば、正規表現リテラルでは改行は使用できないので、文字エスケープを使用しなければなりません。
const pattern = /a\nb/;
const string = `a
b`;
console.log(pattern.test(string)); // true
仕様書
Specification |
---|
ECMAScript Language Specification # prod-CharacterEscape |
ブラウザーの互換性
BCD tables only load in the browser