vs code正则需手动开启,图标亮蓝且右下角显示regex才生效;跨行匹配用[\s\s]*?而非(?s);替换仅支持$1格式;replace all无确认,须预览并限制范围。

正则模式必须手动开启,否则所有元字符当字面量处理
VS Code 默认关闭正则引擎,^\s*$、\d+、. 这些写进去全按普通字符串搜——根本不会匹配空行或数字。核心判断标准只有一个:.* 图标是否亮起(蓝色),且右下角显示 Regex 标签。
最稳操作是快捷键:Alt+R(Windows/Linux)或 Cmd+Option+R(macOS),按一次即切换,状态全局持久。点图标也行,但容易误判:图标灰着、或只亮了一半、或右下角没出现 Regex,都算没开。
常见症状包括:\bconsole\b 搜不到 console 却匹配到 myconsole,^ 和 $ 无法锚定行首行尾——八成是开关没点亮。
跨行匹配必须显式处理,[\s\S]* 比勾选“匹配换行符”更可靠
. 默认不匹配换行符,所以 import.*?from 在多行 import 语句里会断在第一行末尾。VS Code 不支持 (?s) 单行模式(部分版本报错或无效),也不认 \R。
安全写法只有两种:
- 用
[\s\S]*?替代.*?,比如匹配多行注释:/\*[\s\S]*?\*/ - 匹配 JSX 属性值含换行:
className="[\s\S]*?",不能写className="[^"]*"
注意性能:避免 ^[\s\S]*?foo 这类无锚点开头的写法,大文件会卡顿;优先加前置限定,如 import[\s\S]*?from。
替换时捕获组只能用 $1、$2,\1 和 ${1} 全部失效
VS Code 替换语法完全遵循 JavaScript 风格:<p>VS Code 替换语法完全遵循 JavaScript 风格:<code>$0 是整个匹配,$1 是第一个括号捕获内容,$& 可用但易混淆,$` 和 $' 存在但不推荐。
是第一个括号捕获内容,$& 可用但易混淆,$` 和 $' 存在但不推荐。
典型错误:
- 写
\1→ 输出字面量\1 - 写
${1}→ 直接忽略,不报错但不生效 - 写
$1abc→ 只取$1,后面abc当普通文本输出
实用示例:把 const foo = bar; 改成 const foo = /* TODO */ bar;
搜索:(const|let|var)\s+(\w+)\s*=\s*(.*?);<br>替换:$1 $2 = /* TODO */ $3;
想输出字面量 $?写成 $$price,单个 $price 会被当成未定义变量,结果为空。
全局搜索前必须预览,Replace All 没有二次确认
点击 Replace All 后修改立即写入所有文件,不弹窗、不 diff、无法一键跨文件撤销(Ctrl+Z 只作用于当前编辑器)。这是 VS Code 正则最危险的设定。
安全操作流:
- 先输正则,点右下角
Count看匹配总数,超 500 条建议加限制条件 - 在
files to include里填src/**/*.ts,files to exclude填!node_modules/** - 逐条点击结果旁的 ▶ 展开上下文,确认是否真匹配语义(比如别把字符串里的
https://foo.com/api当成 API 调用) - 复杂替换前,先
git commit或至少git stash
真正难的不是写出能跑的正则,而是它在嵌套括号、BOM 头、不同引号混用、空格变种等边界 case 下会不会漏或误杀——每次改完,务必扫一遍真实代码,而不是只信第一个高亮。











