核心操作是查找_(\w)替换为\u$1,精准匹配下划线后单个字母并转大写、自动删除下划线;不处理数字、连续下划线、孤立下划线;需英文输入法、禁用match whole word、首字母小写需手动补全。

查找_(\w)替换为\U$1是核心操作
这个正则能准确匹配每个下划线后紧跟的字母,并只把那个字母转大写,同时自动吞掉下划线本身。它不碰数字、不处理连续下划线、也不动开头或结尾的孤立下划线——行为可预期,适合大多数字段名转换场景。
常见错误是写成_([a-z])或_(\w+):
前者漏掉大写字母(如user_ID里的ID部分);后者会把整个后续单词捕获,\U$1导致全大写(user_name→userName正确,但user_api_key可能错成userAPIKEY)。
- 必须勾选
.*启用正则模式 - 不要开启
Match Whole Word,否则my_var_name中间的_var可能不被匹配 -
\U只作用于紧随其后的$1内容,不会“传染”到后面字符
转换后首字母小写需手动干预
执行_(\w)→\U$1后,像_id会变成Id,_name变成Name——首字母意外大写。这不是正则问题,而是逻辑必然:正则只负责“下划线后字母大写”,不管词首。
补救方法很简单:
- 用
Ctrl+K Ctrl+L对整个结果统一转小写(注意:先松开Ctrl+K再按L) - 或单独选中首字母,按
Ctrl+K Ctrl+U转大写(仅限单个字母) - 若批量处理且开头带下划线的变量较多,可额外加一步:查找
^_+(\w),替换为\L$1\E
连续下划线和数字要提前清理
user__name经_(\w)替换后变成userName(正确),但user___id仍会变成userId——因为正则每次只匹配一个下划线。这通常没问题,但如果你需要严格语义(比如区分user__name和user_name),就得先运行一次全局替换_+→_去重。
数字衔接基本无感:user_id_2_field→userId2Field,符合常规 camelCase 规范;但user_2_id→user2Id也合理,无需额外处理。
- 别指望一条正则解决所有边界:带中文(
用户名_id)、Unicode 字符(user_α_id)、或短横线(api-key)都不在\w覆盖范围内 -
\w等价于[a-zA-Z0-9_],所以user_2_id中_2不会被匹配,只有_i和_d被触发
英文输入法和光标位置是静默失败的主因
很多人按Ctrl+H没反应,或替换后文本不变——八成是输入法处于中文状态,U、L键被系统拦截;或者光标没落在可编辑区域,文件右下角显示RO(只读)。
- 务必切换为英文输入法后再操作
- 替换前确认选区有效:哪怕只选中一个变量,也要看到高亮背景;空选区或纯空白符会导致命令静默失效
- 多光标下,每个光标独立触发替换,但若某个光标停在换行符或空格上,那处就跳过,不报错也不提示
真正麻烦的不是怎么写正则,而是你得记得:它只改名字,不改引用。比如把user_name替换成userName后,代码里所有obj.user_name调用点还留着旧名——得配合Alt+F3查全部匹配,再逐个确认上下文是否同步更新。











