VSCode原生正则驼峰转下划线需用([a-z0-9])([A-Z])匹配边界并替换为$1_$2,连续大写缩写需先用([A-Z]+)(A-Z)处理;Change Case插件更稳但须精准选中标识符再转换。

VSCode 原生正则能完成驼峰转下划线,但必须用对模式,否则会把 XMLHttpRequest 错切成 x_m_l_h_t_t_p_request,或漏掉 userID 中的 ID 部分。
正则匹配要抓准大小写边界,不是简单找大写字母
驼峰转下划线的核心是识别「小写字母后紧跟大写字母」或「数字/小写后跟大写字母」这类边界,而不是无差别把所有大写字母前插下划线。错误写法 [A-Z] 会匹配到每个大写字母,导致过度切分。
- 正确模式:
([a-z0-9])([A-Z])—— 捕获小写或数字 + 大写字母的组合 - 替换为:
$1_$2(注意中间是下划线) - 务必勾选
Match Case和Regex,否则aB和Ab都会被命中 - 如果变量含连续大写字母缩写(如
userID、XMLHttpRequest),需额外处理:先用([A-Z]+)([A-Z][a-z])匹配「多个大写+一个大写+小写」,替换为$1_$2,再跑上一步
Change Case 插件一键转换更稳,但得先选对范围
装了 Change Case 插件后,camelCase → snake_case 是内置命令,但它不分析语义,只按字符规则切分。选错文本,结果就不可控。
- 安全做法:用
\b[a-zA-Z][a-zA-Z0-9]*\b先搜索出所有标识符,Ctrl+D多光标选中,再执行Change Case: snake_case - 避免连点号一起选 ——
user.name若全选,插件会把user和name当两个词分别转,结果仍是user.name,不是user_name - JSON 键名要带引号搜索:
"([a-zA-Z][a-zA-Z0-9]*)",然后只选中捕获组 $1 部分(按Alt+Shift+→扩展选区),再转换
多光标批量操作时,光标位置决定转换粒度
Change Case 对每个光标位置做独立判断:光标落在 userName 的 u 上,它识别整个单词;落在 . 上,则只转 userName 左右两侧的片段。
- 推荐操作流:先
Ctrl+F搜\b[a-z]+[A-Z][a-zA-Z0-9]*\b,逐个Enter跳转,Ctrl+D累加匹配项,全部选中后再统一触发转换 - 不要直接
Ctrl+A全选文件再转 —— 注释、字符串、HTML 属性值里的驼峰名也会被误伤 - 遇到
getUserId这类带动词前缀的,插件会转成get_user_id,符合多数规范;但若项目要求getuserid,就得关插件,手动正则微调
真正难的不是“怎么转”,而是“哪些该转、哪些不该转”——比如 URLParser 转成 u_r_l_parser 就错了,而 urlParser 转 url_parser 才对。每次批量操作前,花 10 秒扫一眼匹配项,比事后修 bug 快得多。


















