VS Code正则需手动启用:按Cmd+R(macOS)或Alt+R(Win/Linux),右下角显示“Regex”且.图标变蓝才算生效;跨行匹配须用[\s\S]?;替换仅支持$1捕获组。

正则模式必须手动开启,快捷键最稳
VS Code 默认关闭正则引擎,哪怕你写了 ^\s*$ 或 \d+,它也当普通字符串处理。不启用就搜不到、替错、甚至改崩整个文件。
唯一可靠的方式是:替换面板打开后,按 Cmd+R(macOS)或 Alt+R(Win/Linux)。不是 Cmd+Option+R,也不是点两次.*图标——那个组合键是旧版残留,现在只认 Cmd+R/Alt+R。
- 按完后右下角必须出现
Regex标签,且 .* 图标变蓝才算生效 - 面板关闭再重开,正则状态自动重置,每次都要重按
- 外接非美键盘(如日文/中文键盘)可能需加
Fn键,例如Fn+Cmd+R - 如果没反应,先确认焦点在替换面板内(别被终端或侧边栏遮挡)
.* 图标亮了 ≠ 正则真在运行
很多人点了 .* 图标,以为万事大吉,结果 console\.log 还是搜不到——因为图标亮起但正则未真正激活。VS Code 的 UI 存在状态覆盖逻辑:
- 点
Aa(大小写敏感)或ab(全字匹配)会悄悄关掉正则,即使 .* 看起来还亮着 - 点一次 .* 后又点 Aa,正则立即失效,但图标不灭;必须再点一次 .* 才能恢复
- 右下角没显示
Regex文字,就等于没开——别信图标颜色
跨行匹配必须显式写 [\s\S]*?,不能靠 UI 按钮
VS Code 的 . 默认不匹配换行符,所以 function.*\{ 在多行函数里必然断在第一行末尾。UI 上那个 ↵(“匹配换行符”)按钮只在全局搜索(Cmd+Shift+F)中有效,在替换视图(Cmd+Shift+H)里根本不起作用。
- 正确写法:用
[\s\S]*?替代.*?,明确覆盖所有字符包括换行符 - 实用例子:
/\*[\s\S]*?\*/匹配多行注释,className="[\s\S]*?"匹配含换行的 JSX 属性值 - 性能警告:避免无锚点的
[\s\S]*error,会扫完整个文件,大项目直接卡死
替换时捕获组只能用 $1,其他写法全静默失败
VS Code 使用 JavaScript 风格替换语法,$1 是唯一合法写法。写错不会报错,而是静默失败:
-
\1会原样输出文字\1,不是报错,是直接当字面量塞进去 -
${1}在大多数版本中为空,部分版本会触发语法错误提示 -
$0表示整个匹配内容;想输出字面量$price,必须写成$$price - 括号必须是捕获型(
(...)),非捕获组(?:...)不生成编号,$1会指向下一个实际捕获组
正则替换最难的部分从来不是语法本身,而是边界控制——比如用 .<em></em> 匹配引号内容,很容易吞掉中间的注释或嵌套结构。这时候宁可用 [^'"] 或 [\s\S]*?(前提是开了 ↵),比盲目依赖贪婪更可靠。


















