字符转义:\\n、\\u{...}

字符转义表示可能无法方便地以其文字形式表示的字符。

¥A character escape represents a character that may not be able to be conveniently represented in its literal form.

语法

¥Syntax

regex
\f, \n, \r, \t, \v
\cA, \cB, …, \cz
\0
\^, \$, \\, \., \*, \+, \?, \(, \), \[, \], {, }, \|, \/

\xHH
\uHHHH
\u{HHH}

注意:, 不是语法的一部分。

¥Note: , is not part of the syntax.

参数

¥Parameters

HHH

表示字符的 Unicode 代码点的十六进制数字。\xHH 形式必须有两个十六进制数字;\uHHHH 表格必须有四个;\u{HHH} 形式可以有 1 到 6 个十六进制数字。

描述

¥Description

正则表达式中可以识别以下字符转义:

¥The following character escapes are recognized in regular expressions:

\f\n\r\t\v

字符串文字 中的相同,但 \b 除外,它表示正则表达式中的 字边界,除非在 字符类 中。

\c 后跟 AZaz 的字母

表示控制字符,其值等于字母的字符值模 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.

js
/[\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)

示例

¥Examples

使用字符转义

¥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:

js
const pattern = /a\nb/;
const string = `a
b`;
console.log(pattern.test(string)); // true

规范

Specification
ECMAScript Language Specification
# prod-CharacterEscape

¥Specifications

浏览器兼容性

BCD tables only load in the browser

¥Browser compatibility

也可以看看