alt+r(windows/linux)或 cmd+option+r(macos)是vscode中唯一可靠启用正则模式的快捷键,可全局持久生效;跨行匹配需用(?s)标志且必须置于正则开头;替换仅支持$1语法,不支持\1或${1};复杂正则推荐用regex previewer插件实时验证分组。

Alt+R(Windows/Linux)或 Cmd+Option+R(macOS)是唯一可靠启用正则的快捷键
VSCode 默认关闭正则模式,点 .* 图标容易漏看状态、误关,而快捷键能强制切换且状态持久——按一次,整个会话期间所有查找/替换都保持正则生效,包括 Ctrl+F、Ctrl+H、Ctrl+Shift+F。
常见错误现象:^s*$ 搜不到空行、console 不匹配、d{4}-d{2}-d{2} 高亮全无——90% 是因为没按这个快捷键,或者按了但没注意右下角是否出现 Regex 标签。
- Windows/Linux:必须用
Alt+R,不是Ctrl+R(那是替换历史)或Ctrl+F(只是打开面板) - macOS:是
Cmd+Option+R,不是Cmd+R或Cmd+Shift+R - 全局搜索(
Ctrl+Shift+F)里同样要手动点右上角.*图标,快捷键不生效
跨行匹配必须加 (?s),不是 [sS]*
VSCode 底层用 ripgrep,默认按行处理,[sS]* 在查找框里根本无效——它会被当作文本字面量,不是正则语法。真正起作用的是单行模式标志 (?s),它让 . 能匹配换行符。
使用场景:匹配函数体、JSX 组件、多行注释、带换行的 JSON 字段值。
-
(?s)console.log([^)]*):可匹配跨多行的console.log(调用 -
(?s)<div>]*>[sS]*?</div>会失败;正确写法是(?s)<div>]*>.*?</div> -
(?s)必须放在正则最开头,不能写在中间或末尾 - 如果同时需要忽略大小写,写成
(?si),顺序无关
替换时捕获组只能用 $1,不能用 或 ${1}
VSCode 使用 JavaScript 风格替换语法, 会被当作文本字面量输出,${1} 是模板字符串语法,在这里不识别。
常见错误现象:替换成 data-id="" 后,文件里真多了 两个字符;或写 $& 想引用整个匹配,结果输出 $& 文本。
- 查找:
class="(w+)",替换:data-class="$1"—— 正确 - 想输出字面量
$price,必须写成$$price;写成$price会被当成未定义捕获组,结果为空 -
$0表示整个匹配内容,$`和$'分别表示匹配前/后文本,但易引发意外截断,优先用明确编号的$1、$2
复杂正则别硬刚内置搜索,用 Regex Previewer 插件实时看分组
内置搜索只高亮、不展示捕获内容,你写完 (d{4})-(d{2})-(d{2}),根本不知道三组分别抓到了什么——尤其当嵌套括号、非贪婪修饰符、前瞻断言混用时,纯靠试错效率极低。
Regex Previewer(作者 mushan)是目前最稳的插件:右侧面板实时显示 Group 0~N,点三角箭头就能展开,还能填 $2/$1 看替换预览。
- 标志位(如
gim)必须填在面板右上角 Flags 输入框,不能塞进正则字符串里写成/pattern/gim - 它默认用 JavaScript 引擎,不支持 PCRE 的
K、(?R)等特性;后端用 PHP/Python 时,得自己心里对齐差异 - 路径中反斜杠容易多转义:从代码里复制正则过来,检查
C:\Users\name是否被误写成C:Users ame(后者在 JS 字符串里会解析失败)
(?s) 的位置和 Flags 的分离填写——这两个点卡住之后,再长的正则也白写。











