我有一个示例字符串,必须从中提取值。给定样本:
{#-- 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,它将只从{#@@#}中提取
当前使用:
/[^{#-]+(?=#})/g
对于这些模板{#--normal parameters#}-它从两个模式中提取值,我需要一次解析一个模式。这些模板的
/[^#@@]+(?=#})/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+#}