10

StackOverflow の大文字に関するいくつかの質問と回答を見ましたが、私の問題に関する回答が見つかりませんでした。

単語の長さが 2 より大きい場合にのみ、文字列内の各単語の最初の文字を大文字にしたいと思います。

私の一時的な解決策は次のとおりです。

var str =  str.toLowerCase().replace(/\b[a-z]/g, function (letter) {
                return letter.toUpperCase();
            }).replace(/\b\w{1,2}\b/g, function (letter) {
                return letter.toLowerCase();
            });

2 つの正規表現を 1 つに統合できるソリューションはありますか?

4

6 に答える 6

3

これを試して:

var str = str.toLowerCase().replace(/\b\w{3,}/g, function (l) {
    return l.charAt(0).toUpperCase() + l.slice(1);
});
于 2013-06-19T20:30:56.880 に答える
2

これは、仕事をするより簡単なソリューションです。

const capitalize = (str) =>
  str.toLowerCase().replace(/\w{3,}/g, (match) =>
    match.replace(/\w/, (m) => m.toUpperCase()));
于 2018-09-21T11:16:19.860 に答える
1

関数を使ってもっときれいにするかもしれません

var capitalize1st = function(str){
    str = str || '';

    // string length must be more than 2
    if(str.length<3){
        return str;
    }

    return str[0].toUpperCase()+str.slice(1);
}

var splitWordsAndCap1st = function(str){
    str = str || '';

    var words = str.match(/\S+/g);

    for(var i=0;i<words.length;i++){
        words[i] = capitalize1st(words[i]);
    }

    return words.join(' ');
}

splitWordsAndCap1st("I would like to capitalize first letter of each word in a string");
于 2013-06-19T20:34:31.757 に答える
0

正規表現は必要ありません(空白をキャプチャするための小さなものだけ)、これを行うことができます

Javascript

function titleCaseLengthGt2(string) {
    var array = string.split(/(\s+)/),
        length = array.length,
        i = 0,
        word;

    while (i < length) {
        //array[i] = array[i].toLowerCase(); // make words lowercased first if you want
        word = array[i];
        if (word.length > 2) {
            array[i] = word.charAt(0).toUpperCase() + word.slice(1);
        }

        i += 1;
    }

    return array.join("");
}

console.log(titleCaseLengthGt2("i  want  to  be  titelised"));

出力

i  Want  to  be  Titelised 

jsfiddle

于 2013-06-19T20:42:17.600 に答える