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

如何用JavaScript正则实现无撇号空格的驼峰式转换?修复字符大写问题

问题原因

你写的正则/['\W]+(.)?/g里,\W本身就包含了撇号('属于非单词字符),再加上你把'单独放进字符集,等于重复匹配这类符号。当处理that's时,'会被这个正则匹配到,它后面的s被捕获到分组里,回调函数直接把这个s转成大写,所以结果就变成了ThatS。

解决思路和代码

方法一:先清掉所有撇号,再处理驼峰

最简单的方式是先把字符串里所有撇号直接移除,这样后续处理就不会因为撇号触发不必要的大写:

function toCamelCase(input) {
  return input
    .toLowerCase()
    .replace(/'/g, '') // 先删掉所有撇号
    .replace(/\W+(.)?/g, (_, char) => char ? char.toUpperCase() : '')
    .replace(/^./, char => char.toLowerCase());
}

// 测试用例
console.log(toCamelCase("Yes, that's my student")); // 输出 "yesThatsMyStudent"
console.log(toCamelCase("Yes, that's my 'student'")); // 输出 "yesThatsMyStudent"

方法二:调整正则,排除撇号作为分隔符

如果你想先保留撇号处理分隔符,最后再移除,可以修改正则,让它只匹配除了撇号和单词字符之外的分隔符(比如空格、逗号),这样撇号不会触发后面字符的大写:

function toCamelCase(input) {
  return input
    .toLowerCase()
    // 只匹配非单词且非撇号的字符序列
    .replace(/[^\w']+(.)?/g, (_, char) => char ? char.toUpperCase() : '')
    .replace(/^./, char => char.toLowerCase())
    .replace(/'/g, ''); // 最后统一移除撇号
}

// 测试用例
console.log(toCamelCase("Yes, that's my student")); // 输出 "yesThatsMyStudent"
console.log(toCamelCase("Yes, that's my 'student'")); // 输出 "yesThatsMyStudent"

关于带引号的单词处理

不管是that's还是'student'这类带撇号的内容,上面两种方法都能处理——要么提前删掉撇号,要么最后统一清理,最终都会把所有撇号去掉,得到符合预期的驼峰格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 21:13:11