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

       最后返回需要的替换 字母

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值