如果替换具有$',则replace方法会产生意外结果

时间:2019-05-10 12:19:17

标签: javascript

当替换字符串包含$'个字符时,请用奇怪的字符串替换方法结果。

示例:https://jsfiddle.net/1jns2eo9/


var p = 'The quick brown fox jumps over the lazy dog. If the dog reacted, was it really lazy?';

var regex = /dog/gi;

document.getElementById('first').innerHTML = p.replace(regex, '$');
/// The quick brown fox jumps over the lazy $. If the $ reacted, was it really lazy?
document.getElementById('second').innerHTML = p.replace(regex, "$'");
/// The quick brown fox jumps over the lazy . If the dog reacted, was it really lazy?. If the reacted, was it really lazy? reacted, was it really lazy?

2 个答案:

答案 0 :(得分:1)

您应该使用

转义字符
replace(regex, "\$")
替换目标中的

$具有特殊含义:将匹配组放入字符串

答案 1 :(得分:0)

这是因为使用replace时,第二个参数可以使用special syntax使替换动态化。 $'模式

  

插入匹配的子字符串之后的字符串部分。

例如,

var str = "abcd";
var regex = /b/;
console.log(str.replace(regex, "$'"))

您会得到acdcd,因为 b 被其后的字符串ab cd 代替。

如果我们将$'模式用作另一个字符串替换的一部分,这会更加明显

var str = "abcd";
var regex = /b/;
console.log(str.replace(regex, "(-replacement: $' :replacement-)"))

如果要避免这种情况并插入文字$',则可以使用$$代替单个$,这是用于插入简单文字{{1 }}字符,因此避免使用其他动态替换:

$