I want to replace a string by another. I found when the replaceValue contains "$"
, the replace will fail. So I am trying to escape "$"
by "$$"
first. The code is looks like this:
var str = ..., reg = ...;
function replaceString(replaceValue) {
str.replace(reg, replaceValue.replace(/\$/g, '$$$$'));
}
But I think it is ugly since I need to write 4 dollar signs.
Is there any other charactors that I need to escape? And is there any better way to do this?
There is a way to call replace
that allows us not to worry about escaping anything.
var str = ..., reg = ...;
function replaceString(replaceValue) {
return str.replace(reg, function () { return replaceValue });
}
Your method to escape the replacement string is correct.
According to section 15.5.4.11 String.prototype.replace of ECMAScript specification edition 5.1, all special replacement sequences begins with $
($&
, $`
, $'
, $n
, $nn
) and $$
specify a single $
in the replacement.
Therefore, it is sufficient to escape all $
with double $$
like what you are doing right now if the replacement text is meant to be treated literally.
There is no other concise way to do the replacement as far as I can see.
Unfortunately, nothing you can do about it.
It's just how JavaScript works with regular expressions.
Here's a good article with the list of all replacement patterns you should be aware of:
http://es5.github.io/#x15.5.4.11