0

以下の関数 (最初の関数) を使用して、テキストの大文字と小文字を変更しています。これは素晴らしいことです。しかし、ハイフンのアポスなどに続く文字を考慮に入れたいと思います。これを含めるように変更するのを手伝ってくれる人はいますか? 私は 2 番目の関数を実行できましたが、これを正規表現に入れることができるはずですか?

function toProperCase(str)
{
    return str.replace(/\w\S*/g, function(txt){return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();});
}

//don't want to do it like this;
function toProperCase(str)
{
    str = str.replace("-", "- ");
    str = str.replace("'", "' ");
    str = str.replace(/\w\S*/g, function(txt){return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();});
    str = str.replace("- ", "-");
    str = str.replace("' ", "'");
    return str;
}
4

3 に答える 3

0

多分これはあなたのために働くでしょうか?

str.replace(/\w*/g, function(txt){
                       return txt.charAt(0).toUpperCase() + 
                              txt.substr(1).toLowerCase();
                   }
);
于 2012-04-13T16:36:18.923 に答える
0
function toProperCase(str) {
    return str.replace(/\b./g, 
           function(txt){return txt.toUpperCase()}
           )
    }

これにより、単語境界が前にある各文字が検出され、大文字バージョンに置き換えられます。

単語境界は、文字列の開始位置と終了位置、および単語文字と非単語文字の間の位置です。単語の文字は文字、数字、またはアンダースコアであり、単語以外の文字はその他すべてです。

「ハイフン、アポストロフィなど」についてはあまり具体的ではないので、文字、数字、アンダースコア以外のすべてに当てはまると思います。

一致する文字のみを置き換えるため、見つかった文字列を細分化したり、小文字の文字列を追加したりする必要がないことに注意してくださいreplace。この場合、それは単一の文字です。

于 2012-04-13T17:04:47.073 に答える
0

おそらく、これはあなたのユースケースにより適しています:

str.replace(/\b[a-z][\w'-]*/ig, function(txt){
        return txt.charAt(0).toUpperCase() + 
               txt.substr(1).toLowerCase();
     }
);

これは基本的に、最初の文字がアルファベットで、その後に単語文字、ハイフン、またはアポスが続くすべての単語を見つけることです。

于 2012-04-13T16:41:37.080 に答える