sublime中短横线转驼峰应先匹配-([a-z])替换为\u$1,驼峰转短横线需分两步:先([a-za-z0-9])([a-z][a-z])→$1-$2,再([a-z])([a-z])→$1-$2;务必开启大小写敏感并统一换行符为lf。

Sublime 中把短横线转驼峰:用 \b([a-z]) 捕获首字母很危险
直接匹配 -[a-z] 并替换为大写字母,看似简单,但容易漏掉开头单词或误伤连字符。正确做法是分两步:先处理所有短横线+小写字母组合,再确保首字母不被改动。
- 查找:
-([a-z]),替换为:\U$1(\U表示后续字符全大写,$1是捕获组) - 如果原字符串以小写字母开头(如
user-name→userName),这步已足够;但若含前缀如data-attr-id,结果是dataAttrId,符合预期 - 注意不要用
\b([a-z])匹配单个字母——它会在每个单词边界触发,比如get-url里的g和u都会被误转
Sublime 中把驼峰转短横线:([a-z])([A-Z]) 是基础,但得防数字和下划线
只靠 ([a-z])([A-Z]) 能处理 userName → user-name,但遇到 XMLParser、userID 或 myAPIKey 就会出错:大写字母连续时,API 可能变成 a-p-i,或数字前后断裂。
- 更稳妥的查找式:
([a-zA-Z0-9])([A-Z][a-z]),替换为:$1-$2—— 先处理“任意字母/数字 + 大写+小写”组合(如userID中的D前加短横) - 再补一刀:
([a-z])([A-Z])→$1-$2,覆盖剩余情况(如myAPI中的my-A) - 如果源串含下划线(
user_name),建议先全局替换_为-,再跑驼峰逻辑,避免正则混淆
大小写敏感开关和换行符干扰:为什么替换没生效?
Sublime 默认关闭大小写敏感(Aa 按钮未高亮),导致 [A-Z] 类模式完全不匹配;另外,若文本含 Windows 换行符(\r\n),而你在 macOS 上编辑,某些跨平台正则可能意外中断匹配。
- 务必点击查找面板右下角的
Aa按钮启用大小写敏感 - 检查换行符格式:菜单
View → Line Endings,统一设为Unix (LF)更稳妥 - 测试时用
Ctrl+H(Win/Linux)或Cmd+H(macOS)唤出替换面板,勾选Regular Expression(.*按钮),别依赖快捷键默认状态
批量文件中安全执行:别直接 Replace All
在多文件中一键替换驼峰名,稍有不慎就把 className 变成 class-name,而你其实只想改变量名——HTML 属性、CSS 类、JS 变量混在一起时,语义无法靠正则区分。
- 先用
Find in Files(Ctrl+Shift+F)预览所有匹配项,确认上下文是否全是目标场景(比如只在const或let后出现) - 对 JS 文件,可限定查找范围:
const\s+([a-z][a-zA-Z0-9]*)\s*=\s*,再替换捕获组,比无差别扫全文件安全得多 - 执行前保存全部文件,Sublime 不支持正则替换撤销(Undo 只撤最后一次操作,不是整批)
HTTPServer” 算不算要拆的驼峰,还是该保留为全大写缩写;这类语义边界,正则永远没法替你决定。











