Ctrl+Shift+R(Win/Linux)或Cmd+Shift+R(macOS)是WebStorm项目全局替换快捷键,支持Scope切换、正则匹配及预览验证,而Ctrl+R仅限当前文件替换。

Ctrl+Shift+R 是全局正则替换的起点,不是 Ctrl+R
Ctrl+R 只在当前文件里操作,哪怕你盯着 console.log 按十次,其他 .ts/.jsx 文件一个都不会动。真正跨文件批量用正则改代码,必须按 Ctrl+Shift+R(Windows/Linux)或 Cmd+Shift+R(macOS)。按完后顶部显示 “Replace in Path”,右上角 Scope 默认是 “All Places”——但别信这个默认值,它可能被上次操作污染,务必手动点开确认。
- 误选成 “Current File” 或填错 Directory 路径,会导致部分模块完全漏扫
- 如果项目有
build、dist、node_modules,它们默认被 WebStorm 排除;但若你手动加过自定义 Scope,得检查是否意外包含这些目录,否则索引拖慢、结果失真 - 按快捷键后光标落在
Find框,此时直接输正则会失败——先点旁边.*按钮启用正则模式,再输入
粘贴进来的正则字符串不会自动转义,必须手动补反斜杠
WebStorm 对手敲的 .、[、+ 会自动变成 \.、\[、\+;但你从控制台复制的报错信息 Cannot read property 'data' of undefined 或从代码里复制的 user.id,粘贴进去就是原样,. 和 ' 全当普通字符处理,根本不会触发正则匹配。
- 搜
user.id字符串?必须写成user\.id,否则会匹配userXid、userid等任意字符 - URL 中的
https://api.example.com?version=2,斜杠不用转义,但.和?、=得写成https://api\.example\.com\?version\=2 - 换行符、制表符别手敲
\n或\t——点搜索框右侧↓图标,选 “Insert line break” 或 “Insert tab character”
Java 正则引擎不支持 JS 环视语法,捕获组要用 $1 不是 \1
WebStorm 底层用的是 JDK 的 java.util.regex.Pattern,不是 JavaScript 的 RegExp。这意味着 (? 或 <code>(?!foo) 这类环视(lookaround)语法直接报错,根本无法启用 .* 按钮。
- 想提取
const foo = 123;里的变量名?用const (\w+) =,替换时写let $1 =—— 注意是$1,不是\1(后者 WebStorm 不识别) - 命名捕获组可用
${name},但得先在正则里定义,比如const (?<var>\w+) =</var>,再用let ${var} = - 测试正则是否合法?鼠标悬停在
.*按钮上,点「Show expression help」看实时解析提示,比盲试快得多
替换前不预览,等于把代码交给随机数生成器
点了 Replace All 就没有撤销按钮,尤其没开 Git 提交或本地历史时,改崩了只能靠肉眼 diff。WebStorm 的 Find 按钮不是摆设,它弹出的查找窗口会列出所有命中位置,逐个点进去看上下文才是唯一靠谱流程。
- 重点检查三项:是否在字符串字面量里(
"user.id")、是否在注释中(// user.id is deprecated)、是否在正则字面量中(/user\.id/g)——这三处一改就 runtime error - 如果目标是改函数签名或变量声明,别硬扛正则,直接用
Ctrl+Shift+Alt+S开结构化搜索,它基于 AST,天然跳过字符串/注释/正则里的“假阳性” - 替换完立刻用
Ctrl+Shift+F搜原字符串,但记得勾选 “Search in comments and strings”,否则// user.id fallback这种就漏掉了
user.id 出现在 JSDoc 的 @param {User} user.id、SQL 查询字符串、Vue 模板插值甚至 JSON Schema 的 "properties": {"user.id": {...}} 里——这些地方既不响应普通文本替换,也不在结构化搜索默认覆盖范围内,得单独拎出来手工核对。


















