JavaScriptでハイフン区切りの文字列をキャメルケースに変換する方法
ハイフン区切りの文字列をキャメルケースに変換する
JavaScriptでは、ハイフン(-)で単語が区切られた文字列(ケバブケース)をキャメルケースに変換したい場面がよくあります。たとえば、CSSのプロパティ名を扱うときや、APIから受け取ったデータのキー名を整形するときなどです。
変換のイメージ
次のようなハイフン区切りの文字列があるとします。
const str = 'this-is-an-example';
この文字列をキャメルケースに変換すると、期待される出力は次のようになります。
const output = 'thisIsAnExample';
つまり、ハイフンを取り除き、2番目以降の各単語の頭文字を大文字にすればよいわけです。
実装コード
split()、map()、join() を組み合わせると、シンプルに実装できます。
const str = 'this-is-an-example';
const changeToCamel = str => {
let newStr = '';
newStr = str
.split('-')
.map((el, ind) => {
return ind && el.length ? el[0].toUpperCase() + el.substring(1)
: el;
})
.join('');
return newStr;
};
console.log(changeToCamel(str));
コードの解説
- split('-'):文字列をハイフンで分割し、
['this', 'is', 'an', 'example']という配列を作ります。 - map():各単語に対して処理を行います。インデックス
indが0より大きい場合(=最初の単語以外)、先頭文字をtoUpperCase()で大文字に変換します。 - ind && el.length:インデックスが0でないこと、かつ要素が空文字でないことを確認しています。これにより、連続したハイフンや先頭・末尾のハイフンが含まれる文字列にも安全に対応できます。
- join(''):加工済みの配列を結合し、1つの文字列に戻します。
出力結果
コンソールには次のように表示されます。
thisIsAnExample
正規表現を使った別のアプローチ
replace() と正規表現を組み合わせれば、さらに簡潔に書くこともできます。
const changeToCamel = str =>
str.replace(/-([a-z])/g, (_, char) => char.toUpperCase());
console.log(changeToCamel('this-is-an-example')); // thisIsAnExample
この正規表現は「ハイフンの直後にある小文字1文字」にマッチし、その文字を大文字へ置き換えます。ハイフン自体もマッチの一部として消費されるため、結果から自動的に取り除かれます。
まとめ
ケバブケースからキャメルケースへの変換には、split() → map() → join() の流れを使う方法と、replace()+正規表現を使う方法の2通りが代表的です。どちらも短いコードで実用的なパフォーマンスを発揮するので、可読性やプロジェクトのコーディングスタイルに合わせて選択しましょう。
-
JavaScriptで指定した文字数に文字列を切り詰める方法
JavaScriptでは、長いテキストを一覧表示やプレビュー用に短く表示したい場面がよくあります。この記事では、文字列と数値を受け取り、指定された文字数を超える場合は文字列を切り詰めて末尾に「...」を付けて返す関数の実装方法を解説します。要件作成する関数は、文字列と数値の2つの引数を受け取ります。文字列の長さが指定された数値より大きい場合は、先頭から指定文字数分だけ切り取った文字列に「...」を連結して返します。切り詰める必要がない場合(元の文字列が指定文字数以下の場合)は、元の文字列をそのまま返します。コード例以下がその実装コードです。 { const { length: len
-
JavaScriptで任意の記法の文字列をキャメルケースに変換する方法
問題 JavaScriptで、通常の文・スネークケース・パスカルケースなどどんな記法で書かれた文字列でも受け取れる関数を作成し、その文字列をキャメルケース(camelCase)に変換することを考えます。 たとえば、関数への入力が次のようになっているとします。 入力 const str = New STRING; 期待される出力 const output = newString; サンプルコード 以下が実際のコードです。 const str = New STRING; const toCamelCase = (str = ) => { return str .re