匹配if / else语句与正则表达式

时间:2014-08-29 21:23:45

标签: javascript regex

我正在编写一个正则表达式,这将允许我使用用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: 

我在这里做错了什么?我对编写正则表达式比较陌生,所以我认为有一种方法,我只是没有正确地做到这一点。

1 个答案:

答案 0 :(得分:2)

您首先要制作+运营商non-greedy。然后,不要将第三个捕获组设置为可选,只需将该组放在非捕获组内,使非捕获组可选。

/{\?if ([^{}]+)}(.+?)(?:{\?else}(.+?))?{\?endif}/g

Live Demo