zoukankan      html  css  js  c++  java
  • 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) {
      // "It's such a fine line between stupid, and clever."
      // --David St. Hubbins
      str = str.replace(/_/g," ")
            .replace(/([A-Z])/g," $1")
            .replace(/^s/,"")
            .replace(/s+/g,"-")
            .toLowerCase();
      return str;
    }
  • 相关阅读:
    React: React的组件状态机制
    React: React的复合组件
    JavaScript:ES6的新特性
    React: 研究React的组件化
    React: 认识React
    CSS:CSS弹性盒子布局 Flexible Box
    iOS:应用程序扩展开发之Today扩展(Today Extesnsion)
    《逆向工程核心原理》
    《左手数据,右手图表》
    《设计模式之禅(第2版)》
  • 原文地址:https://www.cnblogs.com/fffangrui/p/6114020.html
Copyright © 2011-2022 走看看