In Javascript, how can I perform a global replace on string with a variable inside '/' and '/g'?

Viewed 100045

I want to perform a global replace of string using String.replace in Javascript.

In the documentation I read that I can do this with /g, i.e. for example;

var mystring = mystring.replace(/test/g, mystring);

and this will replace all occurrences inside mystring. No quotes for the expression.

But if I have a variable to find, how can I do this without quotes?

I've tried something like this:

var stringToFind = "test";

//first try

mystring = mystring.replace('/' + stringToFind + '/g', mystring);

//second try, not much sense at all

mystring = mystring.replace(/stringToFind/g, mystring);

but they don't work. Any ideas?

11 Answers
var mystring = "hello world test world";
var find = "world";
var regex = new RegExp(find, "g");
alert(mystring.replace(regex, "yay")); // alerts "hello yay test yay"

In case you need this into a function

  replaceGlobally(original, searchTxt, replaceTxt) {
    const regex = new RegExp(searchTxt, 'g');
    return original.replace(regex, replaceTxt) ;
  }

For regex, new RegExp(stringtofind, 'g');. BUT. If ‘find’ contains characters that are special in regex, they will have their regexy meaning. So if you tried to replace the '.' in 'abc.def' with 'x', you'd get 'xxxxxxx' — whoops.

If all you want is a simple string replacement, there is no need for regular expressions! Here is the plain string replace idiom:

mystring= mystring.split(stringtofind).join(replacementstring);
String.prototype.replaceAll = function (replaceThis, withThis) {
   var re = new RegExp(RegExp.quote(replaceThis),"g"); 
   return this.replace(re, withThis);
};


RegExp.quote = function(str) {
     return str.replace(/([.?*+^$[\]\\(){}-])/g, "\\$1");
};

var aa = "qwerr.erer".replaceAll(".","A");
alert(aa);

silmiar post

You can use the following solution to perform a global replace on a string with a variable inside '/' and '/g':

myString.replace(new RegExp(strFind, 'g'), strReplace);

Thats a regular expression, not a string. Use the constructor for a RegExp object to dynamically create a regex.

var r = new RegExp(stringToFind, 'g');
mystring.replace(r, 'some replacement text');

Try:

var stringToFind = "test";
mystring = mystring.replace(new RegExp(stringToFind, "g"), mystring);

Can you use prototype.js? If so you could use String.gsub, like

var myStr = "a day in a life of a thing";
 var replace = "a";
 var resultString = myStr.gsub(replace, "g");
 // resultString will be "g day in g life of g thing"

It will also take regular expressions. To me this is one of the more elegant ways to solve it. prototypejs gsub documentation

Related