FreeCodeCamp筆記之:Spinal Tap Case

题目

Spinal Tap Case将字符串转换为 spinal case。Spinal case 是 all-lowercase-words-joined-by-dashes 这种形式的,也就是以连字符连接所有小写单词。如果你被卡住了,记得开大招 Read-Search-Ask。尝试与他人结伴编程、编写你自己的代码。这是一些对你有帮助的资源:
RegExp
String.replace()

思路

1.意思是将所有的单词,中首字母为大写的转成小写,然后用 - 拼接起来;
2.第一反应的做法是 将所有单词拆分成一个数组,针对数组中的每个值转换一次小写,然后在加上 - 拼接成一个字符串;
3.but,我低估了题目的恶心;因为看到了这个:

FreeCodeCamp筆記之:Spinal Tap Case_第1张图片
image.png

  • 居然还有连在一起的,下划线分开的,空格分开但是存在 - 线的....。

4.于是乎,要改变思路了,看到题目又提示了 String.replace() ,于是乎再一次狠命的深入学习一次这个函数

  1. 主要是处理三种情况:空格 、下划线 、大写字母,用到正则表达式;
  2. 空格、下划线 正则表达式的表示: /\s|_/g ;
  3. 思路是先将空格、下划线转成 -,使用replace;
  4. 第二步对于单词之间没有分开的,直接将大写字母和小写字母中间增加 - ,同样是用replace;
  5. 将所有大写字母转为小写字母;

解答

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');

你可能感兴趣的:(FreeCodeCamp筆記之:Spinal Tap Case)