FCC——Spinal Tap Case

题目

将字符串转换为 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”。

提示
RegExp

String.replace()

思路

整体思路就是用正则表达式替换字符串指定字符。难点在于正则的写法。现逐步分析。

观察第三个测试语句,发现有的单词之间用下划线 “_” 连接,其它用空格连接,需要把它们转换成同一种占位类型,方便最后统一转换成连接符 “-” 。这里先把下划线转为空格。

str = str.replace(/_/g," ")

测试 spinalCase("The_Andy_Griffith_Show") ,结果为:

The Andy Griffith Show

观察第二个测试语句,单词之间并无空格或其他连接符,而是以首字母大写作为单个单词的判断标准。在大写字母之前添加空格,与上面代码保持一致。本解法中,所有单词分隔在转为 “-” 之前都用空格表示。

str = str.replace(/([A-Z])/g," $1");
其中,小括号表示分组, $1 表示第1个小括号捕获内容。

测试 spinalCase("thisIsSpinalTap") ,结果为:

this Is Spinal Tap

然而,这样做之后,有的语句因为首单词的首字符也是大写的,所以前面也会多个空格。我们需要排除这种情况:

str = str.replace(/^\s/,"");

其中 “^” 表示语句开头, “\s” 表示空白符。

接下来,可以把所有空白符替换为题目要求的连接符 “-” :

str = str.replace(/\s+/g,"-");

其中, “+” 表示匹配前一项一或多次,如果不加这个,有一个以上空格的地方会同时出现多个 “-” 并用情况。

最后,把所有字符转为小写,完成!


完整代码:

function spinalCase(str) {
  str = str.replace(/_/g," ")
        .replace(/([A-Z])/g," $1")
        .replace(/^\s/,"")
        .replace(/\s+/g,"-")
        .toLowerCase();
  return str;
}

本文转载自:http://www.cnblogs.com/fffangrui/p/6114020.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值