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

时间:2015-05-06 12:47:43

标签: javascript regex string ckeditor

`<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']}

但是这个字符串的含义---&gt;

{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 个答案:

答案 0 :(得分:1)

如果您只有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}"
相关问题