notepad++正则替换下划线命名需分步处理:先清理首尾及连续下划线,再用\_(\w)→\u$1\e转snake_case为camelcase;原生不支持负向断言,难精准跳过xml_http等全大写缩写。

Notepad++ 正则替换下划线命名的底层逻辑
Notepad++ 的正则引擎基于 PCRE(但不完全兼容),Replace 功能中 \L、\U、\E 等大小写控制序列仅在「匹配后替换」阶段生效,且必须配合 \1、\2 等捕获组使用。直接写 _a → A 会漏掉首字母小写、连续下划线、开头/结尾下划线等边界情况。
基础场景:标准 snake_case → camelCase(如 user_name → userName)
适用前提:字符串只含字母、数字、下划线,且不含连续下划线、开头/结尾下划线,首字符为字母。
- 查找:
_(\w) - 替换:
\U$1\E -
\U开启大写,$1是捕获的字母,\E结束大写控制(避免影响后续字符) - 务必勾选
Match case和Regular expression,取消勾选. matches newline
健壮处理:兼容边界情况(如 _user_name_、__id、user__name)
真实代码里常有前导/尾随下划线、双下划线分隔符,需分两步清理:
- 先删前后下划线:
^_+|_+$→ 空(替换为空字符串) - 再处理双下划线:
_{2,}→_(合并成单下划线) - 最后执行核心转换:
_(\w)→\U$1\E - 注意:这三步不能合并成一个正则,因为
\U对多字符捕获无效,且无法跨位置控制大小写
进阶限制:跳过已存在的驼峰或全大写缩写(如 XML_HTTP_REQUEST)
若想保留类似 XML_HTTP_REQUEST 中的 XML、HTTP、REQUEST 全大写部分,只转纯小写下划线,正则能力就捉襟见肘了。
- Notepad++ 原生正则不支持「负向先行断言」(如
(?),无法精准判断前一字符是否为大写字母 - 可行折中:先人工筛选出疑似全大写段(如
[A-Z]{2,}),用临时标记包裹(如«XML»),转换完成后再还原 - 更可靠的做法是导出文本,用 Python/JS 脚本处理,利用
re.sub或replace配合函数式回调
真正难的不是写对第一个 _(\w),而是确认你手里的变量名到底属于哪一类模式——混用风格的代码里,自动转换永远有歧义点。











