必须先点击搜索框右上角.*图标或按alt+r(win/linux)/cmd+option+r(macos)启用正则模式,右下角出现“regex”标签后,\d+等才被识别为正则而非字面量。

怎么让正则真正生效:先点 .* 再写 \d+
VSCode 里写 \d+ 却搜不到数字?大概率是没点右上角那个 .* 图标。它不亮,\d 就当字面量 "d" 处理,. 也不跨行,^ 和 $ 更不会锚定行首尾。必须手动点一下或按 Alt+R(Win/Linux)/Cmd+Option+R(macOS),右下角出现 Regex 标签才算启用。
常见误操作:
- 输完
console\.log$$.*?$$直接回车 → 没高亮,因为.*没开,括号和点全是字面字符 - 全局搜索(
Ctrl+Shift+F)没结果,但文件内搜(Ctrl+F)有 → 可能工作区根目录没加载,或光标不在编辑器里 - 替换框输
className="$1"没反应 →$1前的捕获组(...)括号没配对,或根本没写进搜索框
限定范围:用 files to include/exclude 控制扫描边界
想只改 src/components/ 下的 .tsx 文件,又不想碰 node_modules 或测试文件?别靠记忆排除,直接填过滤条件:
-
files to include填src/components/**/*.tsx—— 只扫这个路径下的 TypeScript 组件 -
files to exclude填**/test/**, *.spec.tsx, dist/**—— 多个路径用英文逗号分隔,支持 glob - 这些设置仅对本次搜索有效;若长期固定,可写进
.vscode/settings.json的search.exclude,但别全局配,容易干扰 CI
注意:!node_modules 这种写法在 VSCode 搜索面板里无效,必须用 node_modules/**。
跨行匹配:别信 .,老实用 [\s\S] 或勾选 ↵
. 在 VSCode 正则里永远不匹配换行符,哪怕开了 .* 模式。想抓多行内容,两个办法二选一:
- 显式写
[\s\S]*?(非贪婪)或[\s\S]+(贪婪),比如匹配 JSX 标签:<div>([\s\S]*?)</div> - 点击搜索框下方的
↵图标(“匹配换行符”),启用后^和$行为会变:变成匹配整个文档开头/结尾,而非每行 - 别用
.*跨大段文本——可能触发Regular expression is too complex错误,尤其在大型 JSON 或 HTML 文件里
安全替换:预览、分步、引用捕获组 $1
替换前不看上下文,等于把刀交给盲人。关键动作:
- 先点
Find All,左侧文件树里逐个点开匹配项,确认是否在字符串、注释或正则字面量里(比如搜user,别把"username"也替了) - 替换框只支持
$1、$2,不是\1;$0是整个匹配项,${1}可防歧义(如$1abc会被解析为$1+abc,而${1}abc才明确) - 括号必须英文半角、严格配对;嵌套捕获组(
(a(b)c))在 VSCode 里容易失效,优先拆成多个简单组 - 复杂替换建议先
Replace单条试效果,再点Replace All;误操作后Ctrl+Z可撤回,但 Git 提交快照仍是底线
最易被忽略的是:替换时引号、空格、换行都要手动写全——VSCode 不自动补,class="btn" 替成 className="$1" 必须自己加双引号。











