zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    NET VBCSCompiler.exe占用100%,造成项目卡顿的的解决方法
    C#导出word [无规则表结构+模板遇到的坑]
    mysql允许远程连接的命令
    bootstrap-table的一些基本使用及表内编辑的实现
    在 VS2015+EF6.0中使用Mysql 遇到的坑
    NET使用SuperSocket完成TCP/IP通信
    GRPC在NET上的应用
    NET SignaiR 实现消息的推送,并使用Push.js实现通知
    运维自动化之4
    运维自动化之3
  • 原文地址:https://www.cnblogs.com/yinyoupoet/p/13287574.html
Copyright © 2011-2022 走看看