字符转义:\n、\u{...}
字符转义表示可能无法方便地以其字面形式表示的字符。
语法
\f, \n, \r, \t, \v
\cA, \cB, …, \cz
\0
\^, \$, \\, \., \*, \+, \?, \(, \), \[, \], \{, \}, \|, \/
\xHH
\uHHHH
\u{HHH}
注意:,
不是语法的一部分。
参数
HHH
-
表示字符的 Unicode 代码点的十六进制数字。
\xHH
形式必须包含两个十六进制数字;\uHHHH
形式必须包含四个;\u{HHH}
形式可以包含 1 到 6 个十六进制数字。
描述
正则表达式中识别以下字符转义:
\f
,\n
,\r
,\t
,\v
\c
后跟A
到Z
或a
到z
之间的字母-
表示控制字符,其值为等于字母的字符值模 32。例如,
\cJ
表示换行符 (\n
),因为J
的代码点为 74,而 74 模 32 为 10,这是换行符的代码点。因为大写字母及其小写形式相差 32,所以\cJ
和\cj
是等价的。可以使用这种形式表示 1 到 26 之间的控制字符。 \0
-
表示 U+0000 NUL 字符。不能后跟数字(这会使其成为 传统八进制转义 序列)。
\^
,\$
,\\
,\.
\*
,\+
,\?
,\(
,\)
,\[
,\]
,\{
,\}
,\|
,\/
-
表示字符本身。例如,
\\
表示反斜杠,\(
表示左括号。这些是 regexes 中的 语法字符(/
是 regex 字面量的分隔符),因此它们需要转义,除非在 字符类 中。 \xHH
-
表示具有给定十六进制 Unicode 代码点的字符。十六进制数字必须恰好是两位长。
\uHHHH
-
表示具有给定十六进制 Unicode 代码点的字符。十六进制数字必须恰好是四位长。两个这样的转义序列可用于表示 Unicode 感知模式 中的代理对。(在 Unicode 非感知模式下,它们始终是两个单独的字符。)
\u{HHH}
-
(仅限 Unicode 感知模式)表示具有给定十六进制 Unicode 代码点的字符。十六进制数字可以是 1 到 6 位长。
在 Unicode 非感知模式 中,不是上述之一的转义序列将成为标识转义:它们表示反斜杠后面的字符。例如,\a
表示字符 a
。这种行为限制了在不引起向后兼容性问题的情况下引入新转义序列的能力,因此在 Unicode 感知模式中是被禁止的。
在 Unicode 非感知模式中,]
、{
和 }
可以字面地出现,如果无法将它们解析为字符类或量词定界符的结尾。这是 用于 Web 兼容性的弃用语法,你不应该依赖它。
在 Unicode 非感知模式中,字符类 中形式为 \cX
的转义序列,其中 X
是数字或 _
,以与 ASCII 字母相同的方式解码:\c0
与 \cP
相同,模 32 运算后。此外,如果在任何地方遇到 \cX
形式,其中 X
不是已识别字符之一,则反斜杠将被视为字面字符。这些语法也被弃用。
/[\c0]/.test("\x10"); // true
/[\c_]/.test("\x1f"); // true
/[\c*]/.test("\\"); // true
/\c/.test("\\c"); // true
/\c0/.test("\\c0"); // true (the \c0 syntax is only supported in character classes)
示例
使用字符转义
当要匹配一个不容易以其字面形式表示的字符时,字符转义非常有用。例如,你不能在 regex 字面量中字面地使用换行符,因此你必须使用字符转义
const pattern = /a\nb/;
const string = `a
b`;
console.log(pattern.test(string)); // true
规范
规范 |
---|
ECMAScript 语言规范 # prod-CharacterEscape |
浏览器兼容性
BCD 表格仅在浏览器中加载