连字符命名法转驼峰命名需用正则/-(\w)/g匹配并回调大写后字母,转下划线命名可直接全局替换或限定作用域处理;模板中需用回调函数精准替换双花括号内连字符,避免跨边界与嵌套问题。

连字符命名法(kebab-case)转成其他格式,比如驼峰命名(camelCase)或下划线命名(snake_case),核心是用正则精准定位连字符及其后字母,并做对应替换。
连字符转驼峰命名(如 user-name → userName)
关键在于匹配每个 -x 模式,把连字符去掉,再将后面的字母大写:
- 正则:
/-(\w)/g—— 全局匹配连字符 + 后一个单词字符 - 替换逻辑:用回调函数把捕获的字母转大写,例如
replace(/-(\w)/g, (m, c) => c.toUpperCase()) - 注意开头不能有连字符,否则首字母会意外大写;若存在多个连续连字符(如
foo--bar),建议先用str.replace(/-+/g, '-')规范化
连字符转下划线命名(如 event-name → event_name)
这是最直接的字符替换,但需避免误替模板中其他位置的连字符(如 URL 或注释里):
- 若只处理变量名(比如双花括号内),应先限定作用域,例如用
/\{\{([^}]+)\}\}/提取内容,再对内部调用str_replace('-', '_') - 若全局替换,且确认安全,可直接用
str.replace(/-/g, '_');PHP 中推荐str_replace()而非正则,更高效、无贪婪风险 - 不要用
.*?或.*匹配括号内容——易跨边界,破坏结构
批量处理模板中的连字符变量(如 {{user-first-name}} → {{user_first_name}})
常见于 Twig、Blade 或自定义模板引擎,需保括号结构不变,只改内部:
- 推荐用
preg_replace_callback(PHP)或replace()配合回调(JS):先匹配整个{{...}},再对内部字符串做连字符替换 - 示例(PHP):
$result = preg_replace_callback('/\{\{([^}]+)\}\}/', function($m) {
return '{{' . str_replace('-', '_', $m[1]) . '}}';
}, $template); - 单次
preg_replace只能替换最右一个-,循环替换容易出错,回调方式更可靠
注意事项与避坑点
实际使用时容易忽略几个细节:
- 正则分隔符要和字符串引号配合,PHP 中建议统一用单引号写正则,避免反斜杠转义混乱
-
$1在替换字符串中后面紧跟下划线(如$1_)会被解析为变量$1_,应写作${1}_ - 不支持嵌套花括号(如
{{outer{{inner}}}}),这类场景必须用语法解析器,正则无法安全处理 - 大小写敏感性:默认正则不区分大小写,如需严格控制,加修饰符
i;但连字符转换通常不需要











