在尝试删除所有下划线分隔符并将第一个字母转换为大写字母时,我已经开发了以下函数(在此codepen中也可用:http://codepen.io/PiotrBerebecki/pen/RRKjex)。
目的:
将'this_is_some_text'
作为输入字符串,该函数应返回'ThisIsSomeText'
。
使用JS代码:
function capitaliseFirst(str) {
var firstCapital = str.replace(/[a-z]+/g, x => x[0].toUpperCase() + x.slice(1));
return firstCapital.replace(/_/g, '')
}
console.log( capitaliseFirst('this_is_some_text') ); // returns ThisIsSomeText
上面的函数达到了预期的目标,但是我想重构它以便只需要一个replace()
方法。目前我仍然坚持下面的代码。你知道怎么做到这一点吗?
不工作(尚未)JS代码:
function capitaliseFirst2(str) {
return str.replace(/(?:_)?([a-z])/g, '$1')
}
console.log( capitaliseFirst2('some_other_text') ); // should return SomeOtherText
答案 0 :(得分:2)
以这种方式:
function capitaliseFirst2(str) {
return str.replace(/(?:_+|^)(.)/g, (m0, m1) => m1.toUpperCase());
}
我们匹配并大写每个下划线或字符串开头后的每个字符。
答案 1 :(得分:1)
我建议您只使用正则表达式代替使用正则表达式:
function capitaliseFirst2(str) {
return str.split('_').map(function(w) {
return w.charAt(0).toUpperCase() + w.slice(1);
}).reduce(function(a, b) {
return (a + b)
});
}
与正则表达式相比,我不确定性能问题,但它比正则表达式更具可读性。
答案 2 :(得分:1)
使用ES6箭头函数的另一个简短解决方案Array.forEach
函数:
var str = 'this_is_some_text', capitalized = "";
str.split("_").forEach((s) => (capitalized += s[0].toUpperCase() + s.slice(1)));
console.log(capitalized); // "ThisIsSomeText"