【问题标题】:`string.replace` doesn’t change the variable`string.replace` 不会改变变量
【发布时间】:2014-02-05 09:05:03
【问题描述】:
var variableABC = "A B C"; 
variableABC.replace("B", "D") // Wanted output: "A D C".

variableABC 没有改变:

console.log(variableABC); // "A B C"

我希望它是"A D C"

【问题讨论】:

  • 字符串是不可变的,你必须将结果传递给某个地方,可能就像下面的答案一样返回到自身。

标签: javascript string replace


【解决方案1】:

根据 Javascript 标准,String.replace 不应该修改字符串本身。它只返回修改后的字符串。您可以参考Mozilla Developer Network documentation 了解更多信息。

您始终可以将字符串设置为修改后的值:

variableABC = variableABC.replace('B', 'D')

编辑:上面给出的代码只替换第一次出现。

要替换所有匹配项,您可以这样做:

 variableABC = variableABC.replace(/B/g, "D");  

替换所有匹配项并忽略大小写

 variableABC = variableABC.replace(/B/gi, "D");  

【讨论】:

    【解决方案2】:

    string.replace 返回不是一个值,而不是修改源字符串吗?

    所以如果你想修改变量ABC,你需要这样做:

    var variableABC = "A B C";
    
    variableABC = variableABC.replace('B', 'D') //output: 'A D C'
    

    【讨论】:

      【解决方案3】:

      字符串总是被建模为不可变(至少在高级语言 python/java/javascript/Scala/Objective-C 中)。

      所以任何字符串操作,如连接,替换总是返回一个包含预期值的新字符串,而原始字符串仍然是相同的。

      【讨论】:

      • 仅供参考:Ruby 字符串可变的。
      • @Jimmy Thar 在这里是多余的。
      【解决方案4】:

      如果您只想在不使用正则表达式的情况下从字符串中删除子字符串的所有实例,您可以使用:

          var replacestring = "A B B C D"
          const oldstring = "B";
          const newstring = "E";
          while (replacestring.indexOf(oldstring) > -1) {
              replacestring = replacestring.replace(oldstring, newstring);
          }        
          //result: "A E E C D"
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-12-05
        • 1970-01-01
        • 1970-01-01
        • 2023-03-21
        • 1970-01-01
        • 2018-02-04
        • 2019-03-10
        相关资源
        最近更新 更多