转义序列类型

单字符转义序列

一些转义序列由反斜杠后跟单个字符组成。

例如,在 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