VSCode正则需手动启用.*图标并确认右下角显示Regex标签;Replace in Files才写磁盘,跨行匹配须用[\s\S];替换仅支持$1语法,$需写为$$。

点没点 .* 按钮,直接决定正则是否生效
VSCode 默认关闭正则引擎,.* 图标不亮时,你输的 \d、^、[sS] 全是普通字符——不是匹配失败,是根本没走正则逻辑。确认启用的唯一可靠方式:右下角出现 Regex 标签,且 .* 图标为蓝色。快捷键 Alt+R(Windows/Linux)或 Option+R(macOS)比手动点更稳;焦点不在搜索框时按键无效,建议先点击搜索输入框再按。
Replace in Files 才写磁盘,Replace All 只改内存
右上角那个带两个重叠文档图标的 Replace in Files 是真正落盘的操作;而 Replace All(单文档图标)只在已打开的编辑器标签页里做内存替换——标题栏出现 ● 圆点 ≠ 已保存,关掉标签就丢修改。未打开的文件、只读文件(右下角显示 Read-only)会被 Replace in Files 自动跳过,需提前解除只读或用管理员权限运行 VSCode。
跨行匹配必须显式写 [\s\S],别信 .
VSCode 正则不支持 /s(dotAll)标志,. 永远不匹配换行符。想抓多行内容,得用 [\s\S] 或 [^] 替代:/\*[\s\S]*?\*/ 匹配多行注释,{[\s\S]*?} 匹配 JSON 块。贪心写法如 "(.*)" 容易从第一个 " 吃到文件末尾最后一个 ",应改用非贪婪 "(.*?)"。注意:UI 上那个 ↵(“匹配换行符”)按钮仅影响预览显示范围,不改变正则行为本身。
替换字段只能用 $1,写 \1 或 ${1} 就静默失败
VSCode 使用 JavaScript 风格替换语法,捕获组引用严格限定为 $1、$2、$0(整个匹配)。写成 \1 会原样输出字符串 \1,${1} 则被当纯文本或直接报错。例如把 data-id="123" 改成 data-key="id-123",必须搜 data-id="(\d+)",替为 data-key="id-$1"。想输出字面量 $,比如 $price,得写成 $$price;括号在搜索中要转义,console\.log$$ 才能匹配 console.log( 字面量。


















