无法从给定样本中提取变量



我有一个示例字符串,必须从中提取值。给定样本:

{#-- important parameters #}
{#@@ { 'var1': { 'title':'blah blah', 'type':'text', 'value':'def. text', 'maxlength':10 },
'var2': { 'title':'blah blah', 'type':'number', 'value':10, 'min':1, 'max':100 } } #}
{#@@ { 'var3': { 'title':'blah blah', 'type':'range', 'value':'3.0', 'min':1, 'max':10, step: '0.1' } } #}
{#-- normal parameters #}
{#@@ { 'var4': { 'title':'blah blah', 'type':'text', 'value':'def. text', 'required':'false' } } #}
{{Variable_1}}
{{Variable_2}}
{{Variable_3}}

我想提取如下所示:

1({#-重要参数#}到";重要参数"-Regex,它只会从此{#--#}中提取

2(

{#@@ { 'var1': { 'title':'blah blah', 'type':'text', 'value':'def. text', 'maxlength':10 },
'var2': { 'title':'blah blah', 'type':'number', 'value':10, 'min':1, 'max':100 } } #} to  { 'var1': { 'title':'blah blah', 'type':'text', 'value':'def. text', 'maxlength':10 },
'var2': { 'title':'blah blah', 'type':'number', 'value':10, 'min':1, 'max':100 } }

---regex,它将只从{#@@#}中提取

当前使用:

  1. /[^{#-]+(?=#})/g对于这些模板{#--normal parameters#}-它从两个模式中提取值,我需要一次解析一个模式。

  2. 这些模板的/[^#@@]+(?=#})/g

    {#@@{"var1":{"title":"lah blah","type":"text","value":"def.text","maxlength":10},"var2":{"title":"lah blah","type":"number","value":10,"min":1,"max":100}}#}

-它从两个模式中提取值,我需要一次解析一个模式

任何帮助都将不胜感激。感谢

正则表达式无法动态解析字符串。让我解释一下:不可能捕获数量动态可变的组。

然而,此正则表达式可以与";标题";组和第一个";参数";组:

/ {#--s+(.*?)s+#}s+?{#@@s+((?:.|n)+?)s+#} /gm

如果你想匹配所有的{#@@ XXX #}组,你必须提前知道可能的最大病例数。它可以用这样的正则表达式来完成(在最多两个参数的情况下(:

/ {#--s+(.*?)s+#}s+?{#@@s+((?:.|n)+?)s+#}(?:s+?{#@@s+((?:.|n)+?)s+#})? /gm

否则,您必须分两步完成:

  • 通过全局组中的{#-- XXX #}捕获所有{#@@ XXX #}
  • 用CCD_ 6部分将该组分开

为了进一步解释,上面显示的第一个正则表达式可以分为两部分:

  • {#--s+(.*?)s+#},用于捕获group(1)中的{#-- XXX #}
  • 用于捕获group(2)中的{#@@ XXX #}{#@@s+((?:.|n)+?)s+#}

最新更新