必须转义的字符包括?、*、+、.、^、$、[、]、(、)、{、}、|、;在正则中直接使用会触发特殊逻辑,匹配字面值需加反斜杠,如?、*;javascript字符串构造时需双重转义,如\?。

要匹配问号(?)、星号(*)、点号(.)、加号(+)、括号、方括号、花括号、竖线、美元符、插入符等具有特殊含义的字符,必须用反斜杠()进行转义——让它们失去元字符功能,回归字面意义。
哪些符号必须转义才能匹配字面值
正则中以下字符默认是元字符,直接写会触发特殊逻辑,不是匹配自身:
- ?:表示前一项出现 0 次或 1 次 → 要匹配问号本身,写成 ?
- *:表示前一项出现 0 次或多次 → 匹配星号本身,写成 *
- +:表示前一项出现 1 次或多次 → 匹配加号本身,写成 +
- .:匹配任意单个字符(除换行符外)→ 匹配点号本身,写成 .
- ^ $ [ ] ( ) { } | :分别用于锚定、分组、量词、选择等 → 全部需加 前缀才可字面匹配
实际写法要注意“双重转义”场景
在 JavaScript 中,若通过字符串构造 new RegExp(pattern),字符串本身会先解析一次反斜杠,再交给正则引擎解析第二次。因此,一个字面反斜杠需写两个:。
- 想匹配 file?.log → 字面量写法:
/file?.log/ - 同上但用字符串构造:
new RegExp("file\?\.log")(注意:字符串里 ? 会被当作非法转义报错,必须写成 \?) - Windows 路径如 C: emp*.txt → 正则中应写为
C:\temp\*\.txt(字符串中每级反斜杠都要双写)
更安全的替代方案:字符组
对单个特殊字符,也可放进方括号中,多数情况下自动取消元字符含义(少数例外如 ^、-、] 需注意位置):
-
[?]、[*]、[+]、[.]都能准确匹配对应符号 - 比转义更直观,尤其适合批量处理多个特殊字符,例如匹配 price: $12.99? 可写成:
price:s*$[0-9]+.[0-9]{2}?
验证是否生效的小技巧
用在线工具(如 regex101.com)粘贴你的正则和测试文本,观察高亮部分是否正是你要匹配的符号;若整段没匹配或匹配范围过大,大概率是该转义的没转,或该双写的只写了一个反斜杠。











