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

resultStr still contains "javaScript:java"

The above code is not replacing the exact string java. But when I change the code and directly pass the value 'java' it's getting replaced correctly i.e

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

resultStr contains "javaScript:"

So how should I pass a variable to replace function such that only the exact match is replaced.

Gopi
  • 5,656
  • 22
  • 80
  • 146

3 Answers3

5

The replace-function does not take a string as first argument but a RegExp-object. You may not mix those two up. To create a RexExp-object out of a combined string, use the appropriate constructor:

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

Note the double backslashes: You want a backslash in your Regular Expression, but a backslash also serves as escape character in the string, so you'll have to double it.

Simon
  • 3,509
  • 18
  • 21
3

Notice that in one case you're passing a regular expression literal /\bjava\b/gi, and in the other you're passing a string "/\bjava\b/gi". When using a string as the pattern, String.replace will look for that string, it will not treat the pattern as a regular expression.

If you need to make a regular expression using variables, do it like so:

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

See:

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

deceze
  • 510,633
  • 85
  • 743
  • 889
0

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

show 5093240556XXX`