如何用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
相关产品推荐
相关产品推荐

