【问题标题】:RegEx: Extract substring from a string which may contain several number of '{' and '}'RegEx:从可能包含多个“{”和“}”的字符串中提取子字符串
【发布时间】:2015-05-06 12:47:42
【问题描述】:
`<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>`

在这段代码中,我需要在 {} 中获取子字符串。 我正在使用这个正则表达式

/\{([^}]*)\}/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}

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

【问题讨论】:

  • 这不是使用正则表达式完成的工作,尤其是当 JavaScript 正则表达式甚至没有足够的功能来正确匹配嵌套的{} 时。即使是这样,最好编写一个适当的解析器来处理这个问题。

标签: javascript regex string ckeditor


【解决方案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}"

【讨论】:

  • 这里最大的问题是JS不支持平衡组。所以,我们只能使用这样的正则表达式变通方法,扩大嵌套级别的限制..
猜你喜欢
  • 1970-01-01
  • 2023-01-07
  • 2018-05-13
  • 1970-01-01
  • 2020-06-10
  • 2022-08-19
  • 2014-06-24
  • 1970-01-01
  • 2019-02-20
相关资源
最近更新 更多