サーチ…
備考
バックスラッシュで始まるものすべてがエスケープシーケンスではありません。多くの文字はシーケンスをエスケープするのに役立ちません。単純に先行するバックスラッシュを無視します。
"\H\e\l\l\o" === "Hello" // true
一方、 "u"や "x"のような文字は、バックスラッシュの後に誤って使用されると構文エラーを引き起こします。 Unicodeのエスケープシーケンスの接頭辞\u
続けて有効な16進数でも中括弧でもない文字が続くため、以下は有効な文字列リテラルではありません。
"C:\Windows\System32\updatehandlers.dll" // SyntaxError
文字列内の行の最後にあるバックスラッシュは、エスケープシーケンスを導入しませんが、行の継続を示します。
"contin\
uation" === "continuation" // true
他のフォーマットとの類似性
JavaScriptのエスケープシーケンスはC ++、Java、JSONなどの他の言語やフォーマットと似ていますが、細部には大きな違いがあることがよくあります。疑わしいときは、コードが期待通りに動作することをテストし、言語仕様を確認することを検討してください。
文字列と正規表現に特殊文字を入力する
印字可能な文字は、文字列や正規表現のリテラルにそのまま含めることができます。
var str = "ポケモン"; // a valid string
var regExp = /[Α-Ωα-ω]/; // matches any Greek letter without diacritics
文字列や正規表現に印字不可能な文字を含む任意の文字を追加するには、 エスケープシーケンスを使用する必要があります 。エスケープシーケンスは、バックスラッシュ( "\")と1つ以上の他の文字から構成されます。特定の文字に対してエスケープシーケンスを書き込むには、通常は必ずしもそうではないが、その16進文字コードを知る必要がある。
JavaScriptでは、このトピックの例で説明するように、エスケープシーケンスを指定するさまざまな方法が用意されています。文字コードU + 000Aと、 ラインフィード (Unixの改行文字):たとえば、以下のエスケープシーケンスはすべて同じ文字を表します。
-
\n
-
\x0a
-
\u000a
-
\u{a}
ES6で新しく、文字列でのみ - 厳密なモードとテンプレート文字列の文字列リテラルでは
\012
禁止 - 正規表現でのみ
\cj
エスケープシーケンスタイプ
一文字のエスケープシーケンス
いくつかのエスケープシーケンスは、バックスラッシュとそれに続く1文字で構成されています。
たとえば、 alert("Hello\nWorld");
エスケープシーケンス\n
は、文字列パラメータに改行を導入するために使用され、 "Hello"と "World"という単語が連続した行に表示されます。
エスケープシーケンス | キャラクター | Unicode |
---|---|---|
\b (文字列でのみ、正規表現ではない) | バックスペース | U + 0008 |
\t | 水平タブ | U + 0009 |
\n | 改行 | U + 000A |
\v | 垂直タブ | U + 000B |
\f | フォームフィード | U + 000C |
\r | キャリッジリターン | U + 000D |
さらに、シーケンス\0
後に0から7までの数字がない場合は、ヌル文字(U + 0000)をエスケープするために使用できます。
シーケンス\\
、 \'
と\"
。バックスラッシュの後に続く文字をエスケープするために使用されている主要なバックスラッシュは単に無視される非エスケープシーケンスに似ていますが(つまり、 \?
用?
)、それらを明示的にシングルとして扱われます仕様に従って文字列内の文字エスケープシーケンス。
16進エスケープシーケンス
0〜255のコードを持つ文字は、 \x
後に2桁の16進文字コードが続くエスケープシーケンスで表すことができます。たとえば、非区切りの空白文字は、ベース16にコード160またはA0を持つため、 \xa0
と書くことができます。
var str = "ONE\xa0LINE"; // ONE and LINE with a non-breaking space between them
9上記進数字のために、文字にa
f
区別せずに小文字または大文字で、使用されています。
var regExp1 = /[\x00-xff]/; // matches any character between U+0000 and U+00FF
var regExp2 = /[\x00-xFF]/; // same as above
4桁のUnicodeエスケープシーケンス
0〜65535(2 16から 1)との間の符号付き文字はエスケープシーケンスで表すことができる\u
4桁の16進数の文字コードが続きます。
たとえば、Unicode標準では、数字8594または2192の右矢印文字( "→")が16進形式で定義されています。そのエスケープシーケンスは\u2192
です。
文字列 "A→B"が生成されます。
var str = "A \u2192 B";
9上記進数字のために、文字にa
f
区別せずに小文字または大文字で、使用されています。 4桁未満の16進数コードは、小文字の「z」の場合は、 \u007A
左にゼロを埋め込む必要があります。
括弧で囲まれたUnicodeエスケープシーケンス
ES6はUnicodeサポートを0から0x10FFFFまでの完全なコード範囲に拡張します。 2 16 - 1より大きいコードで文字をエスケープするために、エスケープシーケンスの新しい構文が導入されました。
\u{???}
中括弧内のコードがコードポイント値の16進表現である場合、例えば
alert("Look! \u{1f440}"); // Look! 👀
上記の例では、コード1f440
は、Unicode Character Eyesの文字コードの16進表現です。
中括弧内のコードには、値が0x10FFFFを超えない限り、任意の数の16進数を含めることができます。 9上記進数字のために、文字にa
f
区別せずに小文字または大文字で、使用されています。
中括弧付きのUnicodeエスケープシーケンスは、正規表現内ではなく、文字列内でのみ機能します。
オクタルエスケープシーケンス
オクタルエスケープシーケンスはES5では推奨されていませんが、正規表現ではサポートされていますが、テンプレート以外の文字列でも非厳密モードでサポートされています。 8進数のエスケープシーケンスは、1,2,3の8進数で構成され、0〜377の値は8 = 255です。
たとえば、大文字の "E"は、文字コード69または基本8の105を持ちます。したがって、エスケープシーケンス\105
で表すことができます。
/\105scape/.test("Fun with Escape Sequences"); // true
strictモードでは、8進エスケープシーケンスは文字列内では許可されず、構文エラーが発生します。 \0
は\00
や\000
とは異なり、8進エスケープシーケンスとは見なされないため、厳密なモードでは文字列(テンプレート文字列)内でも使用できます。
制御エスケープシーケンス
エスケープシーケンスの中には、正規表現リテラル(文字列以外)の中でのみ認識されるものがあります。これらは、1〜26のコード(U + 0001-U + 001A)でエスケープするために使用できます。 \c
始まる1文字のA-Z(大文字と小文字の区別はありません)で構成されてい\c
。 \c
後の文字のアルファベットの位置が文字コードを決定します。
たとえば、正規表現
`/\cG/`
文字 "G"(アルファベットの7番目の文字)はU + 0007という文字を参照しているため、
`/\cG`/.test(String.fromCharCode(7)); // true