4

この例では、CamelCase を Dashes に変更することがわかりました。ダッシュの代わりにスペースを使用してキャメルケースをセンテンスケースに変更するコードに変更しました。これは正常に機能しますが、「i」や「a」などの 1 単語の文字では機能しません。それをどのように組み込むかについてのアイデアはありますか?

  • thisIsAPain --> これは苦痛です

    var str = "thisIsAPain"; 
    str = camelCaseToSpacedSentenceCase(str);
    alert(str)
    
    function camelCaseToSpacedSentenceCase(str)
    {
        var spacedCamel = str.replace(/\W+/g, " ").replace(/([a-z\d])([A-Z])/g, "$1 $2");
        spacedCamel = spacedCamel.toLowerCase();
        spacedCamel = spacedCamel.substring(0,1).toUpperCase() + spacedCamel.substring(1,spacedCamel.length)
        return spacedCamel;
    }
    
4

3 に答える 3

17

最後のバージョン:

"thisIsNotAPain"
    .replace(/^[a-z]|[A-Z]/g, function(v, i) {
        return i === 0 ? v.toUpperCase() : " " + v.toLowerCase();
    });  // "This is not a pain"

古い解決策:

"thisIsAPain"
    .match(/^(?:[^A-Z]+)|[A-Z](?:[^A-Z]*)+/g)
    .join(" ")
    .toLowerCase()
    .replace(/^[a-z]/, function(v) {
        return v.toUpperCase();
    });  // "This is a pain"

console.log(
    "thisIsNotAPain"
        .replace(/^[a-z]|[A-Z]/g, function(v, i) {
            return i === 0 ? v.toUpperCase() : " " + v.toLowerCase();
        })  // "This is not a pain" 
);

console.log(
    "thisIsAPain"
        .match(/^(?:[^A-Z]+)|[A-Z](?:[^A-Z]*)+/g)
        .join(" ")
        .toLowerCase()
        .replace(/^[a-z]/, function(v) {
            return v.toUpperCase();
        })  // "This is a pain"
);

于 2012-12-05T09:55:40.370 に答える
3

関数の最初の行を次のように変更します

var spacedCamel = str.replace(/([A-Z])/g, " $1");
于 2012-12-05T10:01:49.993 に答える
2

これに対するアルゴリズムは次のとおりです。

  1. すべての大文字にスペース文字を追加します。
  2. 末尾および先頭のスペースをすべて削除します。
  3. 最初の文字を大文字にします。

Javascript コード:

function camelToSpace(str) {
    //Add space on all uppercase letters
    var result = str.replace(/([A-Z])/g, ' $1').toLowerCase();
    //Trim leading and trailing spaces
    result = result.trim();
    //Uppercase first letter
    return result.charAt(0).toUpperCase() + result.slice(1);
}

このリンクを参照してください

于 2012-12-05T10:14:14.883 に答える