必须先点击 .* 按钮启用正则引擎,否则d+、^等均作字面量处理;图标变蓝且显示regex标签即启用成功;跨行匹配需用[ss]或 ,不支持/s标志;替换仅支持$1、$2、$&等js风格语法。

必须先点那个 .* 按钮,否则所有正则都当字面量处理
VSCode 默认关闭正则引擎,.* 图标不亮时,你输的 d+、^、[sS] 全是普通字符,不会匹配数字、行首或空白符。这不是 bug,是设计默认安全策略。
确认已启用的方法只有两个:.* 图标背景变蓝,且搜索框右下角显示 Regex 标签。快捷键是 Alt+R(Windows/Linux)或 Option+R(Mac),但建议养成“输入前先点图标”的习惯——很多人试了十次都失败,就卡在这一步。
- 点了
.*后,才表示真实换行符;没点的话,就是字面上的反斜杠+n两个字符 -
Aa控制大小写,\b控制全词匹配,它们和正则模式无关,可独立开关 - 全局替换是默认行为,VSCode 不支持
/g标志,也不需要写
捕获组引用只能用 $1、$2,不能用 ${1} 或 $& 以外的命名语法
VSCode 的替换字段只认 JavaScript 风格的 $1、$2、$0(整个匹配),${1} 会被当纯文本输出,$& 虽然可用,但容易和 HTML 实体混淆,不推荐。
常见误写:let = → 实际结果是字面字符串 ,不是变量名;正确写法是 let =。
- 多个捕获组嵌套时,按左括号出现顺序编号,不是按内容逻辑
- 想拼接字符串,
$1_abc可以,但$10表示第 10 个捕获组,不是$1后跟0 - 不确定分组数量又想保险?用
$&引用整个匹配项最稳
跨行匹配得靠 [sS] 或 ,. 默认不匹配换行符
VSCode 正则不支持 /s(dotAll)标志,所以 . 永远不匹配换行。想跨行抓内容,必须显式写 [sS](匹配任意空白或非空白)或直接用
。
比如匹配多行 JSON 对象:{[sS]*?};匹配从 /* 到 */ 的注释块:/*[sS]*?*/;想替换两行结构:line1
line2 → newLineA
newLineB。
- 贪婪匹配很危险:
"(.*)"会从第一个"一路吃到文件末尾最后一个";改用"(.*?)"(非贪婪)更安全 -
^和$默认只匹配整个字符串首尾;要匹配每行起止,需配合m标志(VSCode 支持,写在正则末尾,如^abc$m) - 路径或 JSON 中双引号易干扰,优先用
"([^"]*)"而非"(.*)"
执行前务必预览,撤销只在标签页打开时有效
VSCode 没有“替换预览”面板,但 Ctrl+Shift+F 搜索后点“查找全部”,所有匹配会列在侧边栏,这是唯一可靠的事前验证方式。
批量替换后,Ctrl+Z 可逐级撤销跨文件修改——但前提是所有被改文件仍处于打开状态。一旦保存并关闭,就只能靠 Git 恢复了。
- 敏感目录(如
src/api/、locales/)务必先限定搜索范围:点击搜索框底部的文件夹图标,选中具体路径再搜 - 替换完别急着全保存,用
Ctrl+Shift+G打开源码管理视图,重点检查 JSON/YAML/HTML 是否被意外破坏缩进或引号配对 - 结构化文本(如 JSX 属性、Vue 模板)里用正则替换,比想象中更容易漏掉边界条件,宁可多写几条窄规则,也别强塞一条“全能”正则











