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

3

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

我在这里做错了什么?我对编写正则表达式比较新,所以我想肯定有方法的,只是我没有做正确。


我同意有更简单的方法来做这件事!但是,因为问题清晰明了,给你点赞。 - Smandoli
1
尝试使用非贪婪量词。由于 else 是可选的,贪婪量词会超过它。 - Barmar
1个回答

2
你首先想要使 + 运算符变成 非贪婪模式。然后,不要将第三个捕获组设为可选项,而是将该组放在非捕获组中,使非捕获组成为可选项。
/{\?if ([^{}]+)}(.+?)(?:{\?else}(.+?))?{\?endif}/g

"

现场演示

"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接