Here's a short piece of code:
var utility = {
escapeQuotes: function(string) {
return string.replace(new RegExp('"', 'g'),'\\"');
},
unescapeQuotes: function(string) {
return string.replace(new RegExp('\\"', 'g'),'"');
}
};
var a = 'hi "';
var b = utility.escapeQuotes(a);
var c = utility.unescapeQuotes(b);
console.log(b + ' | ' + c);
I would expect this code to work, however as a result I receive:
hi \" | hi \"
If I change the first parameter of the new RegExp constructor in the unescapeQuotes method to 4 backslashes everything starts working as it should.
string.replace(new RegExp('\\\\"', 'g'),'"');
The result:
hi \" | hi "
Why are four backslashes needed as the first parameter of the new RegExp constructor? Why doesn't it work with only 2 of them?