2016-06-25 3 views
1

すべてのアンダースコア区切り文字を削除して最初の文字を大文字に変換しようとすると次のような関数(このcodepenでも利用可能:http://codepen.io/PiotrBerebecki/pen/RRKjex) 。regex replace()メソッドを使用して区切り記号を削除し、1つのステップで最初の文字を大文字にする

目的:

は、入力文字列として'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 

答えて

2

ここに1つの方法です:私たちは一致

​​

及び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) 
    }); 
} 

を。

+0

'.reduce'は私に' .join( '') 'のようにたくさん見えること。 – melpomene

+0

私はいくつかのスピードテストを行いました。正規表現を使って '.replace'を行ったほうが優れていましたが、それほど劇的ではありませんでした。もちろん、.reduce()の代わりに '.join( '')'を使うこともできます。 –

1

Array.forEach機能するようES6矢印機能を使用して別の短いソリューション:

var str = 'this_is_some_text', capitalized = ""; 
    str.split("_").forEach((s) => (capitalized += s[0].toUpperCase() + s.slice(1))); 

console.log(capitalized); // "ThisIsSomeText" 
関連する問題