字符转义:\\n、\\u{...}
字符转义表示可能无法方便地以其文字形式表示的字符。
¥A character escape represents a character that may not be able to be conveniently represented in its literal form.
语法
参数
¥Parameters
HHH
-
表示字符的 Unicode 代码点的十六进制数字。
\xHH
形式必须有两个十六进制数字;\uHHHH
表格必须有四个;\u{HHH}
形式可以有 1 到 6 个十六进制数字。
描述
¥Description
正则表达式中可以识别以下字符转义:
¥The following character escapes are recognized in regular expressions:
\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 字符。后面不能跟数字(这使其成为 遗留八进制转义 序列)。
\^
,\$
,\\
,\.
\*
,\+
,\?
,\(
,\)
,\[
,\]
,{
,}
,\|
,\/
-
: 代表角色本身。例如,
\\
代表反斜杠,\(
代表左括号。这些是正则表达式中的 语法字符(/
是正则表达式文字的分隔符),因此除非在 字符类 中,否则它们需要转义。 \xHH
-
表示具有给定十六进制 Unicode 代码点的字符。十六进制数的长度必须正好是两位数。
\uHHHH
-
表示具有给定十六进制 Unicode 代码点的字符。十六进制数的长度必须恰好为四位数字。两个这样的转义序列可用于表示 Unicode 识别模式 中的代理对。(在 Unicode 不识别模式下,它们始终是两个单独的字符。)
\u{HHH}
-
(仅限 Unicode 识别模式)表示具有给定十六进制 Unicode 代码点的字符。十六进制数的长度可以是 1 到 6 位。
在 Unicode 不识别模式 中,不属于上述之一的转义序列将成为身份转义:它们代表反斜杠后面的字符。例如,\a
代表字符 a
。此行为限制了引入新转义序列而不导致向后兼容性问题的能力,因此在 Unicode 感知模式中被禁止。
¥In Unicode-unaware mode, escape sequences that are not one of the above become identity escapes: they represent the character that follows the backslash. For example, \a
represents the character a
. This behavior limits the ability to introduce new escape sequences without causing backward compatibility issues, and is therefore forbidden in Unicode-aware mode.
在 Unicode 不识别模式下,如果无法将 ]
、{
和 }
解析为字符类或量词分隔符的结尾,则它们可能会显示为 literally。这是 已弃用的 Web 兼容性语法,你不应该依赖它。
¥In Unicode-unaware mode, ]
, {
, and }
may appear literally if it's not possible to parse them as the end of a character class or quantifier delimiters. This is a deprecated syntax for web compatibility, and you should not rely on it.
在 Unicode 不识别模式下,字符类 内 \cX
形式的转义序列(其中 X
是数字或 _
)的解码方式与 ASCII 字母的解码方式相同:当对 32 取模时,\c0
与 \cP
相同。此外,如果在 X
不是可识别字符之一的任何地方遇到形式 \cX
,则反斜杠将被视为文字字符。这些语法也已被弃用。
¥In Unicode-unaware mode, escape sequences within character classes of the form \cX
where X
is a number or _
are decoded in the same way as those with ASCII letters: \c0
is the same as \cP
when taken modulo 32. In addition, if the form \cX
is encountered anywhere where X
is not one of the recognized characters, then the backslash is treated as a literal character. These syntaxes are also deprecated.
/[\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)
示例
使用字符转义
¥Using character escapes
当你想要匹配不易以其文字形式表示的字符时,字符转义非常有用。例如,你不能在正则表达式中按字面意思使用换行符,因此必须使用字符转义:
¥Character escapes are useful when you want to match a character that is not easily represented in its literal form. For example, you cannot use a line break literally in a regex literal, so you must use a character escape:
const pattern = /a\nb/;
const string = `a
b`;
console.log(pattern.test(string)); // true
规范
Specification |
---|
ECMAScript Language Specification # prod-CharacterEscape |
浏览器兼容性
BCD tables only load in the browser