【问题标题】:JavaScript string replace is not workingJavaScript 字符串替换不起作用
【发布时间】:2017-01-14 19:18:46
【问题描述】:

我正在编写一个程序,它采用三个参数,例如,sentence、wordtoreplace、toReplaceWith。

程序应该返回带有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");

【问题讨论】:

  • 为什么要将字符串拆分成单词?请注意,RegExp 不接受三个参数。你需要用括号调用toUpperCase()。 words 或 indexOfWord 一旦被初始化就不要使用它们。你为什么拥有它们?但是当你的函数的调用者可以很容易地提供大写字母时,应用大写似乎有点多余?它使该功能对用户不友好。

标签: javascript arrays string replace charat


【解决方案1】:

您可能应该在 if 语句中调用 toUpperCase

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

【讨论】:

    【解决方案2】:

    试试这个:

    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

    【讨论】:

    • 很抱歉,如果 before 以大写字母开头,它不会用 after 替换,则它不起作用。
    【解决方案3】:

    您错过了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;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-08
      • 2016-02-15
      • 2016-10-05
      • 2012-07-08
      • 2011-08-12
      相关资源
      最近更新 更多