要求
将字符串转换为 spinal case。Spinal case 是 all-lowercase-words-joined-by-dashes 这种形式的,也就是以连字符连接所有小写单词。
样本
spinalCase("This Is Spinal Tap")应该返回 "this-is-spinal-tap"。
spinalCase("thisIsSpinalTap") 应该返回 "this-is-spinal-tap"。
spinalCase("The_Andy_Griffith_Show")应该返回 "the-andy-griffith-show"。
spinalCase("Teletubbies say Eh-oh") 应该返回 "teletubbies-say-eh-oh"。
参考
暴力解法
function spinalCase(str) {
//将不是字母或-的字符替换为-
str = str.replace(/[^a-zA-Z\-]/g,'-');
//将大写字母换为小写字母
str = str.replace(/[A-Z]/g,function(match,offset){
//如果大写字母前面还是字母
if(/[a-z]/.test(str[offset-1])){
return '-'+match.toLowerCase();
}else{
return match.toLowerCase();
}
});
//如果第一个不是字母则去掉
if(!/^[a-zA-Z]/.test(str))str=str.substring(1);
return str;
}
spinalCase('Teletubbies say Eh-oh');
这里犯了一个大错误,以把大写化为小写的思路开始,以找到大写字母再转为小写字母为路径,忽略了其实可以最后全部转换为小写。
简洁解法
function spinalCase(str) {
return str.replace(/[^a-zA-Z\-]/g,'-')//将非字母或连字符转为连字符
.replace(/([a-z])([A-Z])/g,'$1-$2')//将大写转为小写或小写大写转为小写-大写
.toLowerCase();//全部转为小写
}
spinalCase('Teletubbies say Eh-oh');

本文介绍了一种将不同格式的字符串转换为 spinal case 的方法,即 all-lowercase-words-joined-by-dashes 形式。通过使用正则表达式和字符串操作,文章提供了两种实现方案:一种较为复杂的暴力解法,另一种则是更为简洁高效的实现。
944

被折叠的 条评论
为什么被折叠?



