正则替换需分两步:先匹配“下划线+小写字母”,再转大写;Notepad++不支持直接函数调用,须用(?<=_)[a-z]匹配后替换为对应大写字母。

正则替换的核心难点:下划线后字母要大写,但不能动首字母
Notepad++ 的 替换 功能不支持直接在替换框里调用函数(比如 \U 或 \u 在某些引擎中可用,但 Notepad++ 的 PCRE 引擎对大小写转换支持有限),所以不能靠单次替换把 user_name 变成 userName。必须分两步:先标记出所有“下划线 + 小写字母”的位置,再逐个转大写——而最稳的方式是用「查找模式」匹配目标,再用「替换为」插入大写形式。
正确写法:用 (? 匹配下划线后的首小写字母
这个正则的关键在于零宽断言:(? 表示“前面必须是下划线”,但不消耗该下划线字符;<code>([a-z]) 捕获紧跟其后的小写字母。这样就能精准定位要升级的字母,又不会把下划线本身删掉。
替换时填入:\U\1 —— 注意:\U 是 Notepad++ 支持的“转为大写”修饰符,\1 是捕获组内容。不是所有版本都认 \u,但 \U 在 v7.9+ 稳定可用。
操作步骤:
- 打开
查找 → 替换(Ctrl+H) - 勾选
正则表达式,取消勾选. 匹配换行符 - 查找目标填:
(? - 替换为填:
\U\1 - 点
全部替换
为什么不用 _([a-z]) 直接匹配?
如果用 _([a-z]),替换时就得写 \U,但这样会把下划线本身也干掉——变成 userName 没问题,但像 api_v1_endpoint 会被错处理成 apiV1Endpoint(v1 中的 1 不受影响),可一旦遇到 __private 或 name_ 这种边界情况,_([a-z]) 会漏掉或误吞下划线,导致格式错乱。
(? 更安全,因为它不消费下划线,只动字母,后续还能叠加处理(比如再跑一次去掉所有剩余下划线)。
常见坑:
- 没勾选
正则表达式→ 当成普通字符串搜,当然没反应 - 用了
\u\1而非\U\1→ Notepad++ 会原样输出\u\1字符串,不转大写 - 文件含中文或 Unicode 字符 →
[a-z]不匹配中文,但驼峰命名本身也不该含中文,这点反而是保护机制
批量处理多个单词时,要先清理开头和连续下划线
真实代码里常有 _is_valid(前导下划线)、user__name(双下划线)或 MAX_SIZE(全大写)。这些不会被上面的正则触发,得单独预处理:
- 删前导下划线:
^_+→ 替换为空(注意勾选「匹配开头」) - 合并连续下划线:
_{2,}→ 替换为单个_ - 全大写下划线(如
HTTP_CODE)需人工判断:是否真要转成httpCode?如果是常量名,可能不该动——正则无法自动区分语义
最后再跑一遍 (? → <code>\U\1,基本就干净了。
真正麻烦的永远不是正则本身,而是命名里混着大小写、数字、缩写(如 xml_parser 应转 xmlParser 还是 XmlParser),这种得靠人看上下文。工具只负责机械转换,别指望它懂业务。


















