gpt4 book ai didi

javascript - 如何使用正则表达式获取表达式的子组?

转载 作者:行者123 更新时间:2023-12-03 12:06:54 24 4
gpt4 key购买 nike

我有这个模板(类似 mustache ):

{{varone}}

{{vartwo}}

{{#varthree}}
{{subvarone}}
{{subvartwo}}
{{/varthree}}

{{#varfour}}
{{subvarthree}}
{{subvarfour}}
{{/varfour}}

{{^varfive}}
some message
{{/varfive}}

{{age}}

{{var_a}} {{#var_b}} {{var_c}} {{/var_b}}

我想要获取 varone、vartwo、var Three、varfour、var Five 和 varsix,但不获取 block 内的子变量。我有一个正则表达式来获取子组,但它工作得不好,我尝试获取每个没有破折号的表达式,但它算法得到了子变量...

更新:它也应该在单行中工作,所以它应该得到 var_a、var_b 但不是 var_c...

JavaScript: //template 具有上面描述的模板。 console.log("模板 >> ",模板);

matches = template.match(/{{\s*\#\w+\s*}}[^#]*{{\s*\/\w+\s*}}/g) || [];
console.log("MATCHES groups >> ", matches);

matches = template.match(/{{\s*[\w\.\^]+\s*}}/g) || [];
console.log("MATCHES all >> ", matches);

请注意,在 javascript 中,我们需要一个技巧来使点与断线匹配,通过使用 [\s\S],在本例中,我决定包含除破折号之外的所有内容来收集子表达式。这是控制台结果:

MATCHES groups >>  [ '{{#varthree}}\n  {{subvarone}}\n  {{subvartwo}}\n{{/varthree}}',
'{{#varfour}}\n {{subvarthree}}\n {{subvarfour}}\n{{/varfour}}\n\n{{^varfive}}\n some message\n{{/varfive}}' ]
MATCHES all >> [ '{{varone}}',
'{{vartwo}}',
'{{subvarone}}',
'{{subvartwo}}',
'{{subvarthree}}',
'{{subvarfour}}',
'{{^varfive}}',
'{{age}}' ]

最佳答案

I want to get varone, vartwo, varthree, varfour, varfive and varsix, but not subvars inside blocks.

从索引1中获取匹配的组。

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

这里是DEMO

模式解释:

  (?:                      group, but do not capture:
\n '\n' (newline)
| OR
^ the beginning of the string
) end of grouping
{{ '{{'
( group and capture to \1:
[^}]* any character except: '}' (0 or more times)
) end of \1
}} '}}'
<小时/>

您也可以尝试惰性模式。

(?:\n|^){{(.*?)}}

关于javascript - 如何使用正则表达式获取表达式的子组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25147765/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com