题目
Spinal Tap Case将字符串转换为 spinal case。Spinal case 是 all-lowercase-words-joined-by-dashes 这种形式的,也就是以连字符连接所有小写单词。如果你被卡住了,记得开大招 Read-Search-Ask。尝试与他人结伴编程、编写你自己的代码。这是一些对你有帮助的资源:
RegExp
String.replace()
思路
1.意思是将所有的单词,中首字母为大写的转成小写,然后用 - 拼接起来;
2.第一反应的做法是 将所有单词拆分成一个数组,针对数组中的每个值转换一次小写,然后在加上 - 拼接成一个字符串;
3.but,我低估了题目的恶心;因为看到了这个:
- 居然还有连在一起的,下划线分开的,空格分开但是存在 - 线的....。
4.于是乎,要改变思路了,看到题目又提示了 String.replace() ,于是乎再一次狠命的深入学习一次这个函数
- 主要是处理三种情况:空格 、下划线 、大写字母,用到正则表达式;
- 空格、下划线 正则表达式的表示:
/\s|_/g
; - 思路是先将空格、下划线转成 -,使用replace;
- 第二步对于单词之间没有分开的,直接将大写字母和小写字母中间增加 - ,同样是用replace;
- 将所有大写字母转为小写字母;
解答
function spinalCase(str) {
// "It's such a fine line between stupid, and clever."
// --David St. Hubbins
return str.replace(/\s|_/g,"-") //将 下划线和空格 替换为 -
.replace(/([a-z])([A-Z])/g,"$1-$2") //大小写字母之间加上- 分隔
.toLowerCase(); //所有字母转成小写
}
spinalCase('This Is Spinal Tap');