JavaScript中使用$&作为replace替换值不生效问题如何解决
失效原因
JavaScript 中String.prototype.replace()的替换字符串支持$开头的特殊占位符,其中$&的含义是匹配到的整个子串。你传入$&作为替换值时,等价于把匹配到的{{value}}原封不动插回原位置,所以最终输出和原字符串完全一致。
你测试的$1、$a可以正常生效,是因为$1在没有正则捕获组的场景下会被当作普通字符串输出,其他没有命中特殊规则的$开头序列也会原样保留。
解决方法
方法1:转义$字符
要输出字面量$,需要在替换字符串中用$$转义表示单个$,要得到$&,替换值写为$$&即可:
let data = "show {{value}}"; let output = data.replace("{{value}}","$$&"); alert(output); // 输出结果为 show $&
方法2:使用回调函数作为替换值
replace方法第二个参数支持传入函数,函数的返回值会直接作为替换内容,不需要对$做转义处理:
let data = "show {{value}}"; let output = data.replace("{{value}}", () => "$&"); alert(output); // 输出结果为 show $&
内容的提问来源于stack exchange,提问作者Hoa.Tran
相关产品推荐
相关产品推荐

