2017-01-14 10 views
0

私は3つのパラメータ、例えば、文章、語り口、toReplaceWithを取るプログラムを書いています。JavaScript文字列置換が機能していません

プログラムは、wordtoreplaceでの文ストリングをtoReplaceWithに置き換える必要があります。また、ワードプレースが大文字の単語であれば、置き換えられた世界も大文字にする必要があります。私は何度も試しましたが、私のコードは動作しません。助けてください。

function myReplace(str, before, after) { 
 
    var words = str.split(" "); 
 
    var indexOfWord = words.indexOf(before); 
 
    
 
    if (before.charAt(0) === before.charAt(0).toUpperCase) { 
 
     after = capitalize(after); 
 
    } 
 
    str = str.replace(new RegExp(before), after); 
 
    
 
     function capitalize(word) { 
 
     return word.charAt(0).toUpperCase() + word.slice(1); 
 
     } 
 
    return str.replace(new RegExp(after, 'i', 'g'), after);; 
 
} 
 

 
myReplace("A quick brown fox jumped over the lazy dog", "jumped", "leaped");

+0

なぜ文字列で単語を分割しますか? 'RegExp'は3つの引数をとらないことに注意してください。あなたはカッコで 'toUpperCase()'を呼び出す必要があります。 * words *や* indexOfWord *は、一度初期化されると使用しません。なぜあなたはそれらを持っていますか?しかし、あなたの関数の呼び出し元が大文字を簡単に提供できるようになったときに大文字を適用するのは少し冗長に思えますか?それは機能をユーザーフレンドリーにします。 – trincot

答えて

1

おそらく、この試してみてくださいあなたのif声明

if (before.charAt(0) === before.charAt(0).toUpperCase()) { after = capitalize(after); }

+0

はまだ動作しません。 – knight

1

toUpperCaseを呼び出す必要があります:あなたは

function myReplace(str, before, after) { 
    var words = str.split(" "); 
    var indexOfWord = words.indexOf(before); 

    if (before.charAt(0) == before.charAt(0).toUpperCase()) { 
    after = capitalize(after); 
    } 
    str = str.replace(new RegExp('\\b' + before + '\\b'), after); 

    function capitalize(word) { 
    return word.charAt(0).toUpperCase() + word.slice(1); 
    } 
    return str.replace(new RegExp(after, 'i', 'g'), after);; 
} 

を文字列内の検索に '\\ b'を使用できます。ここではドキュメントhttp://www.w3schools.com/code/tryit.asp?filename=FBQS72BU7H97

http://www.w3schools.com/jsref/jsref_regexp_begin.asp

+0

申し訳ありませんが、前が大文字で始まり、後に置き換えられない場合は機能しません。 – knight

0

あなたのif文で.toUpperCase()機能で括弧を逃したが あなたはここにコードをテストすることができます。

私はあなたのバージョンを少しきれいにしようとしましたが、おそらくそれはあなたを助けるでしょう。

function replace(sentence, wordToReplaced, newWord) { 
    if (sentence.includes(wordToReplaced)) { 
    var char = wordToReplaced.charAt(0); 
    if (char === char.toUpperCase()) { 
     newWord = newWord.charAt(0).toUpperCase() + newWord.slice(1); 
    } 
    sentence = sentence.replace(wordToReplaced, newWord); 
    } 
    return sentence; 
} 
関連する問題