如何使用JavaScript replace()而不触发特殊替换模式?
解决JavaScript replace()中特殊字符(如$$)的原样保留问题
JavaScript里的String.prototype.replace()方法,第二个参数如果是字符串的话,会把$开头的序列当作特殊占位符处理:比如$$会被解析成单个$,$&代表匹配到的整个子串,$1对应正则捕获组的内容等。这就是你执行'replaceme'.replace('replaceme', '$$')只得到$的原因。
要实现特殊字符原样保留,有两种靠谱的方式:
方法一:用函数作为replace的第二个参数
函数的返回值会直接作为替换内容,不会解析任何$相关的特殊序列,完全按字面量输出:
// 示例:返回原样的$$ 'replaceme'.replace('replaceme', () => '$$'); // 输出结果:"$$" // 复杂内容示例:包含多个特殊$序列 'replaceme'.replace('replaceme', () => '$&abc$$123'); // 输出结果:"$&abc$$123"
方法二:手动转义特殊$字符
如果坚持要用字符串作为替换参数,需要把每个$转义成$$。比如要得到$$,就需要写成$$$$:
'replaceme'.replace('replaceme', '$$$$'); // 输出结果:"$$"
这种方式适合替换内容固定且简短的场景,要是内容里有大量$,手动转义容易出错,不如方法一高效。
内容的提问来源于stack exchange,提问作者stackers
相关产品推荐
相关产品推荐

