codewars解题笔记 —— 将字符串转驼峰,单词首字母大写

题目:Complete the method/function so that it converts dash/underscore delimited words into camel casing. The first word within the output should be capitalized only if the original word was capitalized.
(完成方法/函数,以便将破折号/下划线分隔的单词转换为骆驼壳。输出中的第一个词只有大写的大写字母才大写。)

Examples:

toCamelCase("the-stealth-warrior") 

// returns "theStealthWarrior"

toCamelCase("The_Stealth_Warrior")

// returns "TheStealthWarrior"

我的答案:

function toCamelCase(str){
  let arr = str.split(/-|_/g);
  let str2 = ''
  arr.forEach((item, index) => {
      console.log(item)
      if (index !== 0) {
          let a = item.charAt(0)
          item = item.replace(a, a.toUpperCase())
      }
      console.log(item)
      str2 = str2.concat(item)
  })
  return str2
}


票数最高答案:

function toCamelCase(str){
      var regExp=/[-_]\w/ig;
      return str.replace(regExp,function(match){
            return match.charAt(1).toUpperCase();
       });
}


思考:

1、首先别人的代码清晰简洁,毕竟是别人的代码。

2、解题思路突破惯性思维。我拿到题目想到的解题思路是先将 小破折号或者下划线去掉,将几个单词拆开,然后找到除了第一个单词其他单词的首字母,将其变成大写,再将改好的单词拼成字符串。别人的解题思路是找到 小破折号或者下划线和后面的第一个单词,直接替换成这第一个单词的大写,完成

ex:  -s =》 S

         -b =》 B

3、正则:/[-_]\w/ig

                [-_]  表示: [...] 位于括号之内的任意字符   引申 =》 [^...] 不在括号之中的任意字符 

                \w    表示:任何单字字符, 等价于[a-zA-Z0-9]    引申  =》 \W 任何非单字字符,等价于[^a-zA-Z0-9] 

                i       表示:执行大小写不敏感的匹配 

                g      表示:执行一个全局的匹配,简而言之,就是找到所有的匹配,而不是在找到第一个之后就停止了 

4、replace

          str = str.replace(/正则/ig,"新值")

          注意:replace无权修改原字符串,必须用变量接住替换后生成的新字符串

          高级:根据不同的关键词,动态替换不同的新值

         str = str.replace(/正则/ig,function(kw){

             kw //本次找到的关键词

             return 根据kw计算出新的替换值

          })

      衍生操作:

     1、删除:将找到的关键词替换为""

     2、格式化:将原字符串中的关键词按新的格式重新组合

          2步:1、用正则将原字符串中的内容分组

                   2、用replace按新格式重新组合各个分组的内容

          ex:"19831226" =>"1983年12月26日"

               birth.replace(/(\d{4})(\d{2})(\d{2})/,"$1年$2月$3日")

               其中:$n可获得第n个()分组对应的子字符串。

      答案中拿到的  match ,就是匹配正则后的 -s

match.charAt(1).toUpperCase();

        这一步,就是 -s =》S

       最后返回需要的替换 字母

你可能感兴趣的:(codewars)