javascript – RegEx:从字符串中提取子字符串,该字符串可能包含多个“{”和“}”

`<html>
<head>
  <title>DailyHoroscope.com</title>
  <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8">
    {if $contact['timezone']} 
     {assign var=local_tz value=$contact['timezone']} 
    {else} 
     {assign var=local_tz value='America/New_York'} 
    {/if} 
    {assign var=tracking_params value="utm_medium={$medium}&utm_source={$source}&utm_campaign={$campaign}"}
</head>
<body style="background:#fff;">
</body>
</html>`

在这段代码中,我需要在{}中获得子串.
我正在使用这个RegEx

/\{([^}]*)\}/mig

它适用于那些只包含一个{和}的子串的类型.喜欢

{if $contact['timezone']}

但是这个字符串的含义—>

{assign var=tracking_params value="utm_medium={$medium}&utm_source={$source}&utm_campaign={$campaign}"}

我期待整个字符串作为结果,但它返回我

{assign var=tracking_params value="utm_medium={$medium},
{$source} and {$campaign}

这是正确的,因为我的正则表达式在获得第一个’}后结束;有没有办法得到使用regEx包含相同数量的'{‘和’}’的字符串?什么是RegEx?

最佳答案
如果您只有1级嵌套花括号,则可以使用

\{((?:[^{}]*\{[^{}]*\})*[^}]*)\}

demo

火柴:

if $contact['timezone']
assign var=local_tz value=$contact['timezone']
else
assign var=local_tz value='America/New_York'
/if
assign var=tracking_params value="utm_medium={$medium}&utm_source={$source}&utm_campaign={$campaign}"

转载注明原文:javascript – RegEx:从字符串中提取子字符串,该字符串可能包含多个“{”和“}” - 代码日志