VSCode搜索框默认支持正则表达式,但需手动点击“.*”图标或按Alt+R(Win/Linux)/Cmd+Alt+R(macOS)启用;未启用时即使输入正则语法也按纯文本匹配。

VSCode 的搜索框默认就支持正则表达式,不需要额外插件或配置,但必须手动启用「正则模式」开关。
怎么打开正则搜索模式
在 VSCode 侧边栏点击「搜索」图标(或按 Ctrl+Shift+F / Cmd+Shift+F),在搜索输入框左侧找到「.*」图标,点击它即可激活正则模式。该图标高亮时即表示正则已启用。
常见误操作:只输入正则语法但没点 .*,结果搜不到任何内容——VSCode 此时仍按纯文本匹配。
- 快捷键切换:聚焦搜索框后按
Alt+R(Windows/Linux)或Cmd+Alt+R(macOS) - 正则模式下,
?、*、.、^、$等字符不再代表字面含义 - 若搜索框右侧显示
.*为灰色,则正则未启用
常用正则写法和注意事项
VSCode 使用的是 JavaScript 风格正则引擎(ECMAScript),不支持 PCRE 特性(如 \K、条件断言),也不支持 \Q...\E 这类转义语法。
典型场景示例:
- 匹配所有注释行:
^\s*//.*(注意^表示行首,需配合「匹配整个行」逻辑) - 替换所有
console.log为debugger:console\.log\s*\([^)]*\)→debugger(.必须转义) - 匹配 JSON key:
"([^"]+)":,捕获组用$1在替换中引用 -
\b有效,但\d和\s在某些旧版 VSCode 中可能不稳定,建议显式写成[0-9]或[ \t\n\r]
替换时怎么引用捕获组
在「替换」输入框中,使用 $1、$2 引用对应编号的捕获组,$& 表示整个匹配内容。
例如:把 function foo() { 改成 const foo = () => {:
function\s+(\w+)\s*\(\)\s*\{
替换为:
const $1 = \(\) => \{
注意:替换字符串中的 (、)、{、}、$ 都要加反斜杠转义,否则会被解析为特殊符号。
- 不支持
${1}这种 ES6 模板语法,只认$1 - 如果正则里用了非捕获组
(?:...),它不会产生编号,不影响后续$2的计数 - 全局替换前务必先点「预览」,避免批量改错
为什么有些正则搜不到?常见坑
最常被忽略的是换行和 Unicode 处理限制:VSCode 的搜索是逐行进行的,.* 默认无法跨行匹配,[\s\S]* 也无效;同时不支持 /s(dotall)标志。
- 想匹配多行内容?只能靠「文件搜索」+「正则」+ 手动展开上下文,无法单次正则跨行捕获
- 中文或 emoji 匹配失败?确保文件编码是 UTF-8,且正则中不要用
\uXXXX写法(部分版本不识别),直接输入字符更可靠 - 大小写敏感由右上角
Aa开关控制,和正则本身无关;但(?i)内联标志在 VSCode 中是有效的 - 搜索范围限定在打开的文件/文件夹,正则不会穿透 node_modules 等排除目录,除非你手动取消勾选「在文件中排除」
正则本身没有问题,问题往往出在开关没开、转义没做、跨行想太多——先确认 .* 图标亮了,再检查特殊字符是否转义,最后看是不是在试图让单行正则干多行的事。









