2017-01-14 125 views
0

我正在编写一个程序,它需要三个参数,例如,句子,wordtoreplace,toReplaceWith。JavaScript字符串替换不起作用

程序应该返回与wordtoreplace的句子字符串应替换为toReplaceWith。如果wordtoreplace是一个大写的词,那么被替换的世界也应该被大写。我尝试了很多次,但我的代码不起作用。请帮助。

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'不需要三个参数。你需要用括号调用'toUpperCase()'。初始化后,您不会使用* words *或* indexOfWord *。你为什么拥有它们?但是当你的函数的调用者可以容易地提供大写字母时,应用大小写似乎有点多余?它使该功能非用户友好。 – trincot

回答

1

你或许应该将if语句中调用toUpperCase

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

+0

仍然无法正常工作。 – knight

1

试试这个:

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

这里的DOC: http://www.w3schools.com/jsref/jsref_regexp_begin.asp

+0

对不起,但它不工作,如果之前以大写字母开头,它不会替换后。 – knight

0

你错过了在.toUpperCase()功能括号中的if声明。

我也试图让你的版本更清洁些,也许它会帮助你。

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; 
}