JS实现spinalCase函数时split方法正则匹配异常,测试用例执行失败
问题根源
当前使用的正则/[\s-_]?(?=[A-Z])/g仅匹配大写字母前的拆分位置,无法识别小写单词之间的空格,导致Teletubbies say Eh-oh拆分后保留了多余空格,最终输出不符合格式要求。
修复方案
调整为两步处理逻辑,用replace方法分别处理驼峰拆分和分隔符统一:
- 先给小驼峰的分界位置(小写字母后接大写字母)插入
- - 把所有空格、下划线统一替换为
-,最后转小写
function spinalCase(str) { return str.replace(/([a-z])([A-Z])/g, '$1-$2') .replace(/[\s_]+/g, '-') .toLowerCase() }
所有测试用例运行结果
spinalCase('This Is Spinal Tap')→this-is-spinal-tapspinalCase("thisIsSpinalTap")→this-is-spinal-tapspinalCase("The_Andy_Griffith_Show")→the-andy-griffith-showspinalCase("Teletubbies say Eh-oh")→teletubbies-say-eh-ohspinalCase("AllThe-small Things")→all-the-small-things
内容的提问来源于stack exchange,提问作者Shahid Alam
相关产品推荐
相关产品推荐

