轉義序列型別

單字元轉義序列

一些轉義序列由反斜槓後跟單個字元組成。

例如,在 alert("Hello\nWorld"); 中,轉義序列\n 用於在字串引數中引入換行符,因此單詞 HelloWorld 以連續的行顯示。

轉義序列 字元 統一
\b(僅在字串中,不在正規表示式中) 退格 U + 0008
\t 水平標籤 U + 0009
\n 換行 U + 000A
\v 垂直標籤 U + 000B
\f 形式飼料 U + 000C
\r 回車 U + 000D

另外,序列\0,當沒有跟隨 0 到 7 之間的數字時,可用於轉義空字元(U + 0000)。

序列\\\'\" 用於轉義反斜槓後面的字元。雖然類似於非轉義序列,其中前導反斜槓被簡單地忽略(即\??),但根據規範,它們被明確地視為字串內的單字元轉義序列。

十六進位制轉義序列

程式碼在 0 到 255 之間的字元可以用轉義序列表示,其中\x 後跟 2 位十六進位制字元程式碼。例如,非中斷空格字元在基數 16 中具有程式碼 160 或 A0,因此可以將其寫為\xa0

var str = "ONE\xa0LINE"; // ONE and LINE with a non-breaking space between them

對於 9 以上的十六進位制數字,使用字母 af,小寫或大寫,沒有區別。

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 位十六進位制字元程式碼。

例如,Unicode 標準使用數字 8594 或十六進位制格式的 2192 定義右箭頭字元(“→”)。所以它的轉義序列將是\u2192

這會產生字串“A→B”:

var str = "A \u2192 B";

對於 9 以上的十六進位制數字,使用字母 af,小寫或大寫,沒有區別。短於 4 位的十六進位制程式碼必須用零填充:\u007A 表示小寫字母 z

Curly 括號 Unicode 轉義序列

Version >= 6

ES6 將 Unicode 支援擴充套件到 0 到 0x10FFFF 的完整程式碼範圍。為了轉義程式碼大於 2 16 - 1 的字元,引入了轉義序列的新語法:

\u{???}

花括號中的程式碼是程式碼點值的十六進位制表示,例如

alert("Look! \u{1f440}"); // Look! 👀

在上面的示例中,程式碼 1f440 是 Unicode Character Eyes 的字元程式碼的十六進位制表示。

請注意,花括號中的程式碼可以包含任意數量的十六進位制數字,只要該值不超過 0x10FFFF 即可。對於 9 以上的十六進位制數字,使用字母 af,小寫或大寫,沒有區別。

帶花括號的 Unicode 轉義序列只能在字串內部工作,而不能在正規表示式中工作!

八進位制轉義序列

從 ES5 開始,不推薦使用八進位制轉義序列,但在正規表示式中仍然支援它們,在非模板字串中也支援非嚴格模式。八進位制轉義序列由一個,兩個或三個八進位制數字組成,其值介於 0 和 377 8 = 255 之間。

例如,大寫字母 E 在基數 8 中具有字元程式碼 69 或 105.因此它可以用轉義序列\105 表示:

/\105scape/.test("Fun with Escape Sequences"); // true

在嚴格模式下,字串中不允許使用八進位制轉義序列,並且會產生語法錯誤。值得注意的是,與\00\000 不同,\0 被認為是八進位制轉義序列,因此在嚴格模式下仍然允許在字串(甚至模板字串)內。

控制轉義序列

某些轉義序列只能在正規表示式文字中識別(不在字串中)。這些可用於轉義程式碼在 1 到 26 之間的字元(U + 0001-U + 001A)。它們由一個字母 A-Z 組成(情況沒有區別),前面是\c\c 之後字母的字母位置確定字元程式碼。

例如,在正規表示式中

`/\cG/`

字母 G(字母表中的第 7 個字母)表示字元 U + 0007,因此

`/\cG`/.test(String.fromCharCode(7)); // true