Javascript string.replace不适用于正则表达式

Javascript string.replace不适用于正则表达式,javascript,regex,string,Javascript,Regex,String,我有一个字符串dfdfd DSFSDFDFDF{{random.number}}dsfdsfsdfsdf{{{bla}}和一个简单的代码,它应该替换给定字符串中的任何{…}: const b = template.replace(/\{{(.*)\}}/g, 'aaaa'); 但是没有发生任何事情template.replace只是不起作用,但是正则表达式似乎匹配所有{{} 有什么想法吗 更新: 刚刚意识到我的输入字符串是错误的。现在,我所有的工作与我原来的正则表达式。不过多亏了@Robo R

我有一个字符串
dfdfd DSFSDFDFDF{{random.number}}dsfdsfsdfsdf{{{bla}}
和一个简单的代码,它应该替换给定字符串中的任何
{…}

const b = template.replace(/\{{(.*)\}}/g, 'aaaa');
但是没有发生任何事情
template.replace
只是不起作用,但是正则表达式似乎匹配所有
{{}

有什么想法吗

更新:


刚刚意识到我的输入字符串是错误的。现在,我所有的工作与我原来的正则表达式。不过多亏了@Robo Robok,我现在才了解了贪婪的正则表达式,并将使用他的正则表达式代替它。

正则表达式在默认情况下是贪婪的。你的
*
吃得尽可能多,其中包括第一对
}

请尝试以下方法:

const b = template.replace(/\{\{.*?\}\}/g, 'aaaa');
*
后面的问号,
使匹配不贪婪

还有两件事:

  • 最好避开所有的花括号。您的模式在不转义它们的情况下可以很好地工作,但最好表明它只是一个常规文本
  • 在您的例子中,括号是多余的,因为您不需要处理花括号之间的捕获字符串

  • 转义花括号
    {}
    \{(.*?\}}
    @S.Jovan他为什么要逃避它们?@revo在这里你我不认为正则表达式有任何错误,因为我正在获得匹配项,尽管你的正则表达式应该是非贪婪的
    {.*}
    ,如果你没有看到匹配项,问题不是你的正则表达式。请出示您的接收输出。OP的问题首先不是贪婪或不贪婪。他说不匹配不是不匹配我想是的。贪婪匹配“有效”,因为它匹配某些东西。但它将所有标签捕获为一个匹配项。这个问题需要更详细地描述,但我相信这与贪婪有关。重读这个问题……但什么也没发生。但是对于他自己的正则表达式,肯定会发生一些事情。@revo这个问题与正则表达式的贪婪有关,因为它吞下了最后一部分(从
    {{{
    )直到字符串的末尾
    }
    。如果他有机会解决第一个问题,贪婪是他的第二个问题。他的第一个问题是根本不匹配。看他在你上面的评论。他的输入字符串格式错误@Ele