Javascript 使用RegExp在特殊字符序列之间提取值

Javascript 使用RegExp在特殊字符序列之间提取值,javascript,regex,Javascript,Regex,我有一些小型模板引擎,需要从任何%{}%事件之间的字符串中提取值 我试着用以下方法来测试它: const EXTRACT_VALUES = /%{(.*?)}%/g let testString = 'bla bla %{var1}% bla bla {var11} bla bla %{var22} bla bla %{{var33}}% bla bla %{var4}% bla bla %{ var5 }%' let values = [] let field while((field =

我有一些小型模板引擎,需要从任何
%{}%
事件之间的字符串中提取值

我试着用以下方法来测试它:

const EXTRACT_VALUES = /%{(.*?)}%/g

let testString = 'bla bla %{var1}% bla bla {var11} bla bla %{var22} bla bla %{{var33}}% bla bla %{var4}% bla bla %{ var5 }%'

let values = []
let field
while((field = EXTRACT_VALUES.exec(testString)) != null) {
  values.push(field[1])
}
console.log(values)
但是我得到的输出是
[“var1”,“var22}bla bla%{{{var33}”,“var4”,“var5”]
,而期望的输出应该是
[“var1”,“var4”,“var5”]


为了实现这一点,我需要在RegExp中更改什么?

尝试不允许字符
{
}
在捕获的元素中使用
[^{}]+
而不是一揽子捕获,这将使您获得的额外捕获无效

const EXTRACT_VALUES = /%{([^{}]+)}%/g

虽然这从技术上回答了这个问题,但我不禁想知道,如果有人想在字符串中插入转义的
\{