轉義序列型別
單字元轉義序列
一些轉義序列由反斜槓後跟單個字元組成。
例如,在 alert("Hello\nWorld");
中,轉義序列\n
用於在字串引數中引入換行符,因此單詞 Hello
和 World
以連續的行顯示。
轉義序列 | 字元 | 統一 |
---|---|---|
\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 以上的十六進位制數字,使用字母 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 位十六進位制字元程式碼。
例如,Unicode 標準使用數字 8594 或十六進位制格式的 2192 定義右箭頭字元(“→”)。所以它的轉義序列將是\u2192
。
這會產生字串“A→B”:
var str = "A \u2192 B";
對於 9 以上的十六進位制數字,使用字母 a
到 f
,小寫或大寫,沒有區別。短於 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 以上的十六進位制數字,使用字母 a
到 f
,小寫或大寫,沒有區別。
帶花括號的 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