VSCode正则需手动启用.图标、替换仅支持$1/$2/$&、.不匹配换行符须用[\s\S]?、Replace All无预览需严格验证范围。

正则开关没点亮,所有元字符当字面量处理
VSCode 默认关闭正则引擎,.* 图标灰色时,你输的 ^、\d+、. 全是普通字符,不会做任何匹配。这不是写错了,是根本没启动。
必须手动点亮 .* 图标(变蓝),或用快捷键:Alt+R(Win/Linux)、Cmd+Option+R(macOS)。右下角出现 Regex 标签才算生效。
这个开关是会话级的:重启 VSCode 后重置;Ctrl+F 和 Ctrl+Shift+F 的正则开关互不影响,都要单独开。
替换字段写错捕获组,$1 以外全无效
VSCode 使用 JavaScript 风格替换语法,只认 $1、$2、$&。写成 ${1}、\1 或 $01 都会静默失败——要么原样输出,要么不替换。
-
console\.log\((.*)\)→ 替换为debugger; $1,不能写debugger; ${1} - 想输出字面量
$price,得写成$$price(第一个$是转义) -
$10表示第 10 个捕获组,不是$1后跟数字0;不确定分组数时,$&最保险
跨行匹配没处理换行符,.* 在多行里直接断掉
VSCode 的 . 永远不匹配换行符,foo.*bar 在多行文本中必然卡在第一行末尾。这不是配置问题,是引擎限制。
安全写法只有两种:[\s\S]*? 或 (.|\n)*?,显式覆盖所有字符和换行符。
别依赖 UI 上那个 ↵ 按钮:它只在 Ctrl+Shift+F 全局搜索中起作用,在 Ctrl+F 当前文件搜索里完全无效。
典型场景:
- 匹配多行注释:/\*[\s\S]*?\*/
- 匹配跨行 console.log:console\.log\([\s\S]*?\);?
执行前没验证匹配范围,Replace All 是直接写内存
VSCode 的 Replace All 不预览、不 diff、不二次确认。一旦点错,跨文件修改无法一键撤回——除非所有文件仍打开且未保存。
执行前必须验证三件事:
- 先用
Ctrl+Shift+F搜索,看左侧结果树是否只有你预期的那些匹配项 - 逐个点开匹配项左侧的 ▶,展开上下文,确认前后几行逻辑一致(比如别把注释里的
this.xxx也替了) - 检查
files to include和files to exclude:默认排除node_modules,若要搜它,得手动清空该字段或改成!
真正难的从来不是正则语法本身,而是嵌套结构——比如匹配 JSX 中某个属性值、提取带转义引号的 JSON 字符串。这些地方稍不注意,就会漏匹配或误吞内容。


















