You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JS中camelCase、PascalCase、snake_case、kebab-case互转方法

JavaScript实现camelCase/PascalCase/snake_case/kebab-case互转

日常做代码规范校验、前后端接口字段格式对齐、生成代码片段的时候,经常需要在四种常用命名格式之间做转换,不需要为每两种格式单独写转换逻辑,先实现通用的单词拆分函数,再基于拆分结果拼接成目标格式即可,代码轻量无依赖。

核心:通用单词拆分函数

不管输入是哪种命名格式,先统一拆成纯小写的单词数组,后续所有格式转换都基于这个数组做拼接,避免重复的正则判断:

function splitIntoWords(str) {
  return str
    // 把下划线、短横线、空格等显式分隔符替换为空格
    .replace(/[_-\s]+/g, ' ')
    // 识别驼峰格式的大小写边界,在单词分界处加空格
    .replace(/([a-z])([A-Z])/g, '$1 $2')
    // 处理连续大写的场景(比如getHTTPResponse拆分为get HTTP Response)
    .replace(/([A-Z]+)([A-Z][a-z])/g, '$1 $2')
    // 统一转小写后拆分为数组,过滤空值
    .toLowerCase()
    .split(' ')
    .filter(Boolean);
}

如果需要处理带数字、特殊字符的命名,可以在替换逻辑里加一行.replace(/[^a-zA-Z0-9]/g, ' '),会自动过滤非字母数字的字符,数字会保留在相邻单词片段中,符合常规命名习惯。

各目标格式转换实现

基于拆分好的单词数组,按目标格式的规则拼接即可:

  • 转camelCase(小驼峰):第一个单词全小写,后续每个单词首字母大写,直接拼接
function toCamelCase(str) {
  const words = splitIntoWords(str);
  return words
    .map((word, idx) => idx === 0 ? word : word[0].toUpperCase() + word.slice(1))
    .join('');
}

// 用例
// toCamelCase('user_info') → 'userInfo'
// toCamelCase('user-info') → 'userInfo'
// toCamelCase('UserInfo') → 'userInfo'
  • 转PascalCase(大驼峰):所有单词首字母大写,直接拼接
function toPascalCase(str) {
  const words = splitIntoWords(str);
  return words
    .map(word => word[0].toUpperCase() + word.slice(1))
    .join('');
}

// 用例
// toPascalCase('user_info') → 'UserInfo'
// toPascalCase('user-info') → 'UserInfo'
// toPascalCase('userInfo') → 'UserInfo'
  • 转snake_case:所有单词小写,用下划线连接
function toSnakeCase(str) {
  return splitIntoWords(str).join('_');
}

// 用例
// toSnakeCase('userInfo') → 'user_info'
// toSnakeCase('UserInfo') → 'user_info'
// toSnakeCase('user-info') → 'user_info'
  • 转kebab-case:所有单词小写,用短横线连接
function toKebabCase(str) {
  return splitIntoWords(str).join('-');
}

// 用例
// toKebabCase('userInfo') → 'user-info'
// toKebabCase('UserInfo') → 'user-info'
// toKebabCase('user_info') → 'user-info'

以上实现可以覆盖绝大多数前端开发场景,如果需要支持更特殊的命名(比如带连续数字、缩写专有名词固定大写),只需要调整splitIntoWords里的拆分规则即可,不需要修改各个转换函数的逻辑。

内容的提问来源于stack exchange,提问作者Marek Lisiecki

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 19:27:28