必须转义的元字符包括?、*、.、+、^、$、[、]、(、)、{、}、|;斜杠/在字面量中需写成/,反斜杠需写成\;用方括号如[?]可避免转义混乱。

因为斜杠在正则中既是分隔符又是字面字符,而点、括号、问号等符号默认有特殊含义——不转义就会被当作语法指令执行,而不是匹配你看到的那个字符本身。
哪些符号必须转义才能当普通字符用
正则引擎把以下字符当作“元字符”,直接写会触发逻辑功能,不是找它自己:
-
?:表示“前面的元素可有可无” → 想匹配问号,得写
? -
*:表示“前面的元素重复零次或多次” → 匹配星号,写
* -
.:代表“任意单个非换行字符” → 匹配小数点,写
. - +、^、$、[、]、(、)、{、}、|:全都需要加反斜杠才能字面匹配
斜杠 / 的双重身份最容易踩坑
在 JavaScript 字面量写法(如 /pattern/)里,斜杠是定界符,不是正则内容。所以要匹配 URL 中的 /,必须写成 /,否则正则提前结束,报错或漏匹配。
但用 new RegExp("...") 构造时,斜杠不再是定界符,不用转义;反而字符串本身会先解析一次反斜杠——这时 "/" 和 "/" 效果一样,真正需要的是 "\/"(两个反斜杠)才等于正则里的一个 /。
反斜杠 自己最难处理
匹配一个真实的反斜杠,本质是“让反斜杠失去转义能力”,这需要层层剥离:
- 在正则字面量中:写
\(两个反斜杠),第一个告诉引擎“下一个字符按字面理解”,第二个就是你要的反斜杠 - 在字符串构造中(如
new RegExp("\\")):Java、C#、Python 等语言先按字符串规则吃掉一对\变成一个,再交给正则引擎,它再把剩下的当作转义前缀——所以必须写四个反斜杠\\,最终变成一个字面反斜杠
更安全的替代方案:用方括号包住
对单个特殊字符,放进 [ ] 里多数能自动取消元字符意义,比如:
-
[?]、[*]、[+]都能准确匹配对应符号 -
[.]匹配点号,比.更直观,且避免了反斜杠嵌套混乱 - 注意例外:
[^]、[-]、[]]位置不对会出问题,把]放最开头、-放最后可规避

















