我正在编写一个正则表达式,这将允许我使用用JavaScript编写的基本条件if / else系统。 (我知道可能有更简单的方法来做到这一点!)
这是我需要处理的内容:
{?if language = german}Hallo!{?else}Hello!{?endif}
{?if language = german}{#greeting}{?endif}
我写过/{\?if ([^{}]+)}(.+)(?:{\?else})?(.+)?{\?endif}/g
,但不幸的是只与此部分匹配。到目前为止,我一直在使用RegExr进行测试。
我使用输出表达式1: $1\n2: $2\n3: $3\n
的预期输出将是:
1: language = german
2: Hallo!
3: Hello!
1: language = german
2: {#greeting}
3:
不幸的是,我得到了这个:
1: language = german
2: Hallo!{?else}Hello!
3:
1: language = german
2: {#greeting}
3:
我在这里做错了什么?我对编写正则表达式比较陌生,所以我认为有一种方法,我只是没有正确地做到这一点。
答案 0 :(得分:2)
您首先要制作+
运营商non-greedy。然后,不要将第三个捕获组设置为可选,只需将该组放在非捕获组内,使非捕获组可选。
/{\?if ([^{}]+)}(.+?)(?:{\?else}(.+?))?{\?endif}/g