JavaScript
 Computer >> コンピューター >  >> プログラミング >> JavaScript

JavaScriptで任意の記法の文字列をキャメルケースに変換する方法


問題

JavaScriptで、通常の文・スネークケース・パスカルケースなどどんな記法で書かれた文字列でも受け取れる関数を作成し、その文字列をキャメルケース(camelCase)に変換することを考えます。

たとえば、関数への入力が次のようになっているとします。

入力

const str = 'New STRING';

期待される出力

const output = 'newString';

サンプルコード

以下が実際のコードです。

const str = 'New STRING';
const toCamelCase = (str = '') => {
    return str
        .replace(/[^a-z0-9]/gi, ' ')
        .toLowerCase()
        .split(' ')
        .map((el, ind) => ind === 0 ? el : el[0].toUpperCase() + el.substring(1, el.length))
        .join('');
};
console.log(toCamelCase(str));

出力結果

newString

コードの解説

この関数は、次の手順で文字列をキャメルケースへと変換しています。

  1. replace(/[^a-z0-9]/gi, ' '):英数字以外のすべての文字(アンダースコア「_」やハイフン「-」など)を半角スペースに置き換え、単語の区切りを統一します。
  2. toLowerCase():文字列全体をいったん小文字に揃えます。
  3. split(' '):スペースを基準に文字列を分割し、単語の配列を作成します。
  4. map(...):先頭の単語はそのまま使い、2番目以降の単語は最初の文字だけを大文字にして、残りをそのまま連結します。
  5. join(''):すべての単語をつなぎ合わせて、最終的なキャメルケースの文字列を生成します。

補足:連続した空白への対応

元の文字列に複数の連続したスペースが含まれる場合、split(' ') の結果に空文字列が混ざり、意図しない出力になることがあります。そのようなケースに備えるには、filter(Boolean) を挟んで空の要素を除外しておくとより安全です。

const toCamelCase = (str = '') => {
    return str
        .replace(/[^a-z0-9]/gi, ' ')
        .toLowerCase()
        .split(' ')
        .filter(Boolean)
        .map((el, ind) => ind === 0 ? el : el[0].toUpperCase() + el.substring(1, el.length))
        .join('');
};

  1. JavaScriptで文字列を日付に変換する方法

    日付を表すのに最もおすすめの形式は「yyyy-mm-dd」です。これはISO 8601(国際標準規格)に準拠した形式で、国や地域による表記の違いによる混乱がなく、誰にとっても分かりやすいのが特徴です。JavaScriptでは、この形式の文字列からDateオブジェクトへの変換はとても簡単です。文字列をそのままDateコンストラクタに渡すだけで、自動的に解析してくれます。基本的な例let a = 2019-08-10; console.log(new Date(a));出力結果上記のコードを実行すると、次のような出力が得られます。Sat Aug 10 2019 05:30:00 GMT+0530

  2. JavaScriptで配列をSet(セット)に変換する方法

    JavaScriptで配列をSetに変換するときの基本JavaScriptでは、Setオブジェクトを使うことで、配列から重複しない一意の値だけを持つコレクションを簡単に作成できます。SetはES6(ECMAScript 2015)で導入された組み込みオブジェクトで、同じ値が複数回追加されても自動的に1つにまとめられるのが特徴です。変換自体は非常にシンプルで、new Set(配列)と書くだけで完了します。コード例:配列からSetへの変換以下は、重複を含む配列をSetに変換して画面に表示するサンプルコードです。<!DOCTYPE html> <html lang=ja> &