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

如何用正则表达式精确替换双大括号为三重大括号且避免重复替换?

解决重复替换双大括号为三重大括号的问题

你的问题出在原正则会匹配所有连续的两个{或},哪怕是已经替换成三重括号里的前两个/后两个,所以重复执行会不断叠加括号。要实现仅替换独立的双大括号,可以用正则的断言机制精准匹配:

现代环境解决方案(支持ES2018及以上)

利用负向前后断言确保匹配的双大括号前后没有其他大括号:

let mystring = '{{Hello Tom}} , {{How are you doing today}}';
// 第一次执行
let output_string = mystring.replace(/(?<!{){{(?!{)/g, "{{{").replace(/(?<!})}}(?!})/g, "}}}");
console.log(output_string); // 输出: {{{Hello Tom}}} , {{{How are you doing today}}}
// 重复执行也不会改变结果
output_string = output_string.replace(/(?<!{){{(?!{)/g, "{{{").replace(/(?<!})}}(?!})/g, "}}}");
console.log(output_string); // 还是: {{{Hello Tom}}} , {{{How are you doing today}}}

各部分正则说明:

  • (?<!{){{(?!{):只匹配前后都没有{的双左大括号
    • (?<!{):负向后行断言,确保{{前面不是{
    • (?!{):负向前瞻断言,确保{{后面不是{
  • (?<!})}}(?!}):同理,只匹配前后都没有}的双右大括号

兼容旧环境解决方案(比如旧版浏览器)

如果环境不支持负向后行断言,可以用捕获组来处理:

let mystring = '{{Hello Tom}} , {{How are you doing today}}';
let output_string = mystring.replace(/(^|[^{]){{/g, "$1{{{").replace(/}}(}|$)/g, "}}}$1");

说明:

  • (^|[^{]){{:匹配开头或非{字符后的双左大括号,捕获前面的字符/位置,替换时保留并添加一个{
  • }}(}|$):匹配双右大括号后是}或结尾的情况,捕获后面的}或位置,替换时添加一个}并保留捕获内容

这样不管执行多少次,都只会把原本的双大括号改成三重,不会重复叠加。

内容的提问来源于stack exchange,提问作者Ramesh S

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 16:30:44