【问题标题】:Exact replace of string in JavascriptJavascript中字符串的精确替换
【发布时间】:2010-12-01 07:20:40
【问题描述】:
hidValue="javaScript:java";
replaceStr = "java";
resultStr=hidValue.replace("/\b"+replaceStr+"\b/gi","");

resultStr 仍然包含“javaScript:java”

上面的代码没有替换确切的字符串 java。但是当我更改代码并直接传递值'java'时,它会被正确替换,即

hidValue="javaScript:java";
resultStr=hidValue.replace(/\bjava\b/gi,"");

resultStr 包含“javaScript:”

那么我应该如何传递一个变量来替换函数,以便只替换完全匹配的。

【问题讨论】:

    标签: javascript string replace exact-match


    【解决方案1】:

    replace 函数不将字符串作为第一个参数,而是将 RegExp 对象作为参数。你不能把这两者混为一谈。要从组合字符串中创建 RexExp 对象,请使用适当的构造函数:

    resultStr=hidValue.replace(new RegExp("\\b"+replaceStr+"\\b","gi"),"");
    

    注意双反斜杠:您需要在正则表达式中使用反斜杠,但反斜杠也可用作字符串中的转义字符,因此您必须将其加倍。

    【讨论】:

      【解决方案2】:

      请注意,在一种情况下,您传递的是正则表达式文字 /\bjava\b/gi,而在另一种情况下,您传递的是字符串 "/\bjava\b/gi"。当使用字符串作为模式时,String.replace 将查找该字符串,它不会将模式视为正则表达式。

      如果您需要使用变量制作正则表达式,请这样做:

      new RegExp("\\b" + replaceStr + "\\b", "gi")
      

      见:

      https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/RegExp
      https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String/replace

      【讨论】:

        【解决方案3】:

        `让 msisdn = '5093240556699' 让 isdnWith = numb.msisdn.slice(8,11); 让 msisdnNew = msisdn.replace(isdnWith, 'XXX', 'gi');

        显示 5093240556XXX`

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-03-11
          • 1970-01-01
          • 1970-01-01
          • 2013-10-27
          • 2013-08-30
          • 2015-03-22
          • 1970-01-01
          相关资源
          最近更新 更多