避免匹配/替换字符串的自定义转义部分

Avoid matching/replacing custom-escaped part of string

本文关键字:自定义 转义部 字符串 替换      更新时间:2023-09-26

我用正则表达式替换字符串,如下所示:

var str = "{% {{name}} %}: {{name}}";
console.log(str.replace(/{{([^{}]*)}}/g, "John")) // {% John %}: John 

我想使用 {% 和 %} 来转义两者之间的任何内容 - 这意味着它应该跳过替换。所以预期的输出是:// {{name}}: John

实现这一目标的最佳方法是什么?

像这样?

var str = "{% {{name}} %}: {{name}}";
var data = {
  name: 'John'
}
str = str.replace(/{%(.+?)%}|{{(.+?)}}/g, function(_, $1, $2) {
  return $1 || data[$2]
});
document.write(str)