You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript中replace替换含$字符串时单双引号结果差异问题

为什么JavaScript中replace用单引号和双引号包裹参数会有不同结果?

问题出在replace方法的字符串替换参数里,$开头的序列有特殊解析规则,不是单引号本身的问题,是你参数里的$刚好撞上了单引号触发了特殊序列。

看你的代码细节:

  • 当用单引号包裹参数时,替换字符串实际是'123$'。这里的$'是replace的特殊序列,它会被替换成匹配到的子串(也就是input)后面的所有内容——你的原字符串里input后面是),所以$'直接变成了),替换后就成了'123),和原字符串的)拼在一起就是test('123))。
  • 用双引号包裹时,替换字符串是"123$",这里的$后面是",不属于replace的特殊序列字符(特殊序列包括$&、$、$'、$n这类),所以$被当作普通字符保留,最终结果就是正常的test("123$")。

如果想要单引号包裹时也保留$,有两种简单解决办法:

  1. 把参数里的$转义成$$(replace里$$代表普通的$字符):
const params = '123$'.replace(/\$/g, '$$');
const res1 = aa.replace(/input/g, `'${params}'`);
// 此时res1输出 test('123$')
  1. 用函数作为replace的第二个参数,函数返回的字符串不会解析$序列:
const res1 = aa.replace(/input/g, () => `'${params}'`);
// 这样res1也会输出 test('123$')

内容的提问来源于stack exchange,提问作者风说起就起

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 10:04:55