(完成方法/函数,以便将破折号/下划线分隔的单词转换为骆驼壳。输出中的第一个词只有大写的大写字母才大写。)
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
最后返回需要的替换 字母