下划线转驼峰最简有效正则为_(\w),因sublime引擎支持\u转义且仅作用于捕获组,可稳定实现user_id_2→userid2;但不适用于_id开头、双下划线、xml_http等场景。

为什么_(\w)是下划线转驼峰最简有效正则
因为 Sublime 的正则引擎支持 \U 转义序列,它只对捕获组内的字符生效,不碰下划线本身,也不影响前后空白或数字。这是唯一能在不装插件前提下稳定处理 user_id_2→userId2 的方式。
操作时必须:
- 勾选 .*(启用正则模式)
- 关闭 Match Whole Word(否则 user_id_name 中的 _id 可能不被匹配)
- 输入法切到英文(中文输入法下 $1 可能被吞)
- 替换前先用 Ctrl+Z 撤销一次,确认光标没卡在只读区域或注释里
_(\w) 不能直接处理的三种典型场景
这个正则不是万能的,遇到以下情况会出错或需额外步骤:
-
_id开头 → 变成Id,首字母意外大写,得手动小写第一个字母(Ctrl+K+L) -
first__name(双下划线)→ 只匹配第二个_,first_name留着不动;应先全局替换_+→_清理冗余 -
XML_HTTP→ 变成Xml_Http,缩写全被拆开;这不是正则缺陷,而是命名本身不符合 camelCase 常规,建议先人工重写为xmlHttp再走流程
驼峰转下划线为什么不能只靠([a-z])([A-Z])
这条正则看似合理,但实际会把 XMLHttpRequest 错切成 x_m_l_http_request,因为 XML 是连续大写,([a-z])([A-Z]) 根本匹配不到中间边界。
正确做法分两步(且必须分开执行):
- 第一步:查找 ([A-Z]+)([A-Z][a-z]),替换为 $1_$2(把 XMLHttp → XML_Http)
- 第二步:再跑 ([a-z])([A-Z])→$1_$2(把 XML_HttpRequest → xml_http_request)
- 最后统一小写:用 Ctrl+K+L,别用菜单里的 Lower Case,多光标下后者行为不可靠
插件 vs 正则:什么情况下必须装 Case Conversion
当你需要处理这些情况时,正则已力不从心,必须用插件:
-
user_id_2_field→userId2Field(数字位置保留、衔接逻辑自动判断) -
HTTPStatus→httpStatus(全大写块整体小写,不拆成h_t_t_p_status) - 多光标选中
content-type和X-Forwarded-For,想转成contentType和xForwardedFor(短横线识别 + 大写缩写处理) - 右键菜单里没有
To Camel Case选项(说明插件没装或没生效,此时所有快捷键如Ctrl+K Ctrl+C都无效)
插件安装后,记得重启 Sublime 或执行 Package Control: Satisfy Dependencies,否则多光标下命令可能静默失败——这点最容易被忽略,光标停在点号 . 或空格上时,插件连提示都没有。











