2017-03-04 12 views
0

私はJavaScriptの問題の下で問題を抱えています。JavaScript:文章を修正してください

質問: 文章であるはずの文字列sが与えられました。しかし、誰かが別の言葉の間にスペースを入れるのを忘れていて、なんらかの理由で彼らはすべての言葉の最初の文字を大文字にしました。次の改正を行って文を返します。

単語の間にスペースを1つ入れます。 大文字を小文字に変換します。

"CodefightsIsAwesome"、出力が "codefightsは素晴らしいである" であるべきです。

"Hello"の出力は "hello"にする必要があります。

私の現在のコードは次のとおりです。

enter image description here

今、forループの私の目はちょうど手動で文字列から部分をスライスします。 このダイナミックを作成し、「スペース」を大文字の文字列の前に挿入するにはどうすればよいですか?

あなたは、文字列の末尾にA-Z、または文字でない1つの以上の文字が続くA-Zに一致するようにRegExp/[A-Z][^A-Z]*/gString.prototype.match()を使用することができます

+0

入力文字列@JijoCleetus S –

+0

の値は何ですか? – guest271314

答えて

2

を助けてください。 Array.prototype.map()は、一致する単語の.toLowerCase()を呼び出し、結果の文字列の一致の間に空白文字を含めるために、パラメータ" ".join()を呼び出します。また

var str = "CodefightsIsAwesome"; 
 
var res = str.match(/[A-Z][^A-Z]*/g).map(word => word.toLowerCase()).join(" "); 
 
console.log(res);

、@FissureKingによって示唆されているように、あなたは我々がかつてループスルーでき

var str = "CodefightsIsAwesome"; 
 
var res = str.replace(/[A-Z][^A-Z]*/g, word => word + ' ').trim().toLowerCase(); 
 
console.log(res);

+1

1文字の単語を使用できるように '+'の代わりに '*'を使用することはできますか? – nnnnnn

+0

@nnnnnn更新された投稿を参照してください。 '[a-z]'に '[^ A-Z]'を代入して、大文字でない文字と一致させます。 – guest271314

+0

入力が '' ThereIsNobodyCrazierThanI "'だったら? – nnnnnn

-1

をチェーン.trim().toLowerCase()String.prototype.repalce()を使用することができます。

以下では、最初の文字が返される配列で常に大文字にする必要があることを前提としています。それが真でない場合は、下の最初のifブロックを削除してください。

それ以降の各文字について、大文字であるかどうかを確認します。そうであれば、それをスペースで始まるリターン配列に追加します。そうでなければ、そのまま配列に追加します。

最後に、配列を文字列に戻して返します。

const sentence = "CodefightsIsAwesome"; 
 

 
const amend = function(s) { 
 
    ret = []; 
 
    for (let i = 0; i < s.length; i++) { 
 
    const char = s[i]; 
 
    if (i === 0) { 
 
     ret.push(char.toUpperCase()); 
 
    } else if (char.toUpperCase() === char) { 
 
     ret.push(` ${char.toLowerCase()}`); 
 
    } else { 
 
     ret.push(char); 
 
    } 
 
    } 
 
    return ret.join(''); 
 
}; 
 

 
console.log(amend(sentence));

1

ではなくループをコーディング、私は(合理的)、単純な文字列置換と1行でそれを行うだろう:

function amendTheSentence(s) { 
 
    return s.replace(/[A-Z]/g, function(m) { return " " + m.toLowerCase() }) 
 
      .replace(/^ /, ""); 
 
} 
 

 
console.log(amendTheSentence("CodefightsIsAwesome")); 
 
console.log(amendTheSentence("noCapitalOnFirstWord")); 
 
console.log(amendTheSentence("ThereIsNobodyCrazierThanI"));

大文字のいずれかを正規表現/[A-Z]/にマッチさせ、thをeにマッチした文字とその文字に小文字のスペースを加えて、文字列の先頭に追加されたスペースを削除します。

さらに読書:

関連する問題