字面字符:a、b
Baseline
Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since 2015年7月.
字面字符(literal character)在输入文本中精确匹配其自身。
语法
c
参数
c
-
除下列语法字符之外的任意单个字符。
描述
在正则表达式中,大多数字符可以按字面意义出现。它们通常是模式的最基本构建块。例如,以下是来自移除 HTML 标签示例中的模式:
const pattern = /<.+?>/g;
在此示例中,.
、+
和 ?
被称为语法字符。它们在正则表达式中具有特殊含义。模式中的其余字符(<
和 >
)则是字面字符。它们在输入文本中匹配自身:即左尖括号和右尖括号。
以下字符是正则表达式中的语法字符,不能作为字面字符出现:
在字符类中,更多字符可以按字面意义出现。更多信息请参阅字符类页面。例如 \.
和 [.]
均匹配字面 .
。但在 v
模式字符类中,存在一组预留的语法字符。为确保全面性,下表列出了 ASCII 字符在不同语境下可否以转义或非转义形式出现:“✅”表示字符代表自身,“❌”表示会引发语法错误,“⚠️”表示字符有效但具有特殊含义。
字符 | 在 u 或 v 模式下的外部字符类 |
u 模式字符类 |
v 模式字符类 |
|||
---|---|---|---|---|---|---|
未转义 | 已转义 | 未转义 | 已转义 | 未转义 | 已转义 | |
123456789 "' |
✅ | ❌ | ✅ | ❌ | ✅ | ❌ |
!#%&,:;<=>@`~ |
✅ | ❌ | ✅ | ❌ | ✅ | ✅ |
] |
❌ | ✅ | ❌ | ✅ | ❌ | ✅ |
()[{} |
❌ | ✅ | ✅ | ✅ | ❌ | ✅ |
*+? |
❌ | ✅ | ✅ | ✅ | ✅ | ✅ |
/ |
✅ | ✅ | ✅ | ✅ | ❌ | ✅ |
0DSWbdfnrstvw |
✅ | ⚠️ | ✅ | ⚠️ | ✅ | ⚠️ |
B |
✅ | ⚠️ | ✅ | ❌ | ✅ | ❌ |
$. |
⚠️ | ✅ | ✅ | ✅ | ✅ | ✅ |
| |
⚠️ | ✅ | ✅ | ✅ | ❌ | ✅ |
- |
✅ | ❌ | ✅⚠️ | ✅ | ❌⚠️ | ✅ |
^ |
⚠️ | ✅ | ✅⚠️ | ✅ | ✅⚠️ | ✅ |
\ |
❌⚠️ | ✅ | ❌⚠️ | ✅ | ❌⚠️ | ✅ |
备注:
在 v
模式字符类中,既可转义又可取消转义的字符恰恰是那些被禁止作为“双重标点符号”的字符。更多信息请参阅 v
模式字符类。
当需要精确匹配语法字符时,必须使用反斜杠(\
)进行转义。例如,要在模式中匹配字面 *
,需在模式中写成 \*
。将语法字符作为字面字符使用会导致意外结果或引发语法错误——例如 /*/
不是有效的正则表达式,因为量词前未跟随模式。在非 Unicode 感知模式下,若无法将 ]
、{
和 }
解析为字符类结束符或量词分隔符,则可能直接作为字面字符。这是一种为 web 兼容性而保留的已废弃的语法,不应依赖它。
正则表达式字面量不能包含某些非语法字面字符。/
不能作为字面字符出现在正则表达式字面中,因为 /
本身是字面的分隔符。若需匹配字面 /
,需将其转义为 \/
。换行符同样不能作为字面字符出现在正则表达式字面中,因为字面不能跨行存在。此时需使用字符转义(如 \n
)。使用 RegExp()
构造函数时则无此限制,但字符串字面量有其自身的转义规则(例如 "\\"
实际表示单个反斜杠字符,因此 new RegExp("\\*")
与 /\*/
效果相同)。
在非 Unicode 感知模式下,该模式被解释为 UTF-16 码元序列。这意味着代理对实际上代表两个字符。当与其他特性结合使用时,这会导致意外行为:
/^[😄]$/.test("😄"); // false,因为模式被解释为 /^[\ud83d\udc04]$/
/^😄+$/.test("😄😄"); // false,因为模式被解释为 /^\ud83d\udc04+$/
在 Unicode 感知模式中,该模式会被解释为 Unicode 码位序列,且代理对不会被拆分。因此,应始终优先使用 u
标志。
示例
>使用字面字符
以下示例摘自字符转义。模式中的 a
和 b
字符是字面字符,而 \n
是转义字符,因为它不能在正则表达式字面量中直接出现。
const pattern = /a\nb/;
const string = `a
b`;
console.log(pattern.test(string)); // true
规范
Specification |
---|
ECMAScript® 2026 Language Specification> # prod-PatternCharacter> |
浏览器兼容性
Loading…