string.replace不能与正则表达式一起使用

时间:2018-03-11 22:54:15

标签: javascript regex string

我有这个字符串dfdfd dsfsdfsdfsdf {{random.number}} dsfdsfsdfsdf {{bla}}和简单的代码,用来替换给定字符串中的任何{{...}}

const b = template.replace(/\{{(.*)\}}/g, 'aaaa');

但没有任何事情发生template.replace只是不起作用,但正则表达式似乎匹配所有{{}}

有什么想法?

更新

刚才意识到我的输入字符串错了。现在我已经使用了我的原始正则表达式。不过感谢@ Robo-Robok,我现在了解了greedy正则表达式,并将使用他的正则表达式。

1 个答案:

答案 0 :(得分:2)

默认情况下,正则表达式是贪婪的。您的.*尽可能多地吃,包括第一个}}对。

请改为尝试:

const b = template.replace(/\{\{.*?\}\}/g, 'aaaa');

*之后的问号,?使比赛变得非贪婪。

还有两件事:

  1. 最好逃避所有花括号。你的模式可以很好地运行而不会逃避它们,但是表明它只是一个普通的文本是个好主意。
  2. 在您的情况下,括号是多余的,因为您不会对花括号之间的捕获字符串做任何事情。