使用 Javascript 解析正则表达式 如果否则



添加一个正则表达式101 URL: https://regex101.com/r/7Pd1ri/1/

我已经在解决这个问题大约 3 个半小时了。

我一辈子都无法弄清楚我做错了什么。我非常接近使其完美工作,但我不知道如何检查第一次出现{/IF}

我的正则表达式:

{IFs*([^}]+)}([sS]+)(?:{/ELSE})([sS]+){/IF}

正在解析的文件:

{IF !isLoggedIn}
<a href="/sign-in/">Sign In</a>
{ELSE}
Welcome back, {>username}!<br />
{# students}
<li>{#>last_name}, {#>first_name}</li>
{/#}
{/IF}
{IF isLoggedIn}
Beta Testing...
{/IF}

出于某种原因,正则表达式一直捕获到第二个{/IF}作为ELSE的主体

您的问题是 else 块捕获组的贪婪行为:

([sS]+)

这意味着获得尽可能大的匹配,仍然遵守正则表达式的其余部分。

要更改它,请在+后添加?以使其成为惰性运算符。现在意味着获得尽可能小的匹配。

您的正则表达式现在将是:

{IFs*([^}]+)}([sS]+)(?:{/ELSE})([sS]+?){/IF}

https://regex101.com/r/7Pd1ri/2

有关此行为的更多详细信息,请参阅在正则表达式的上下文中懒惰和贪婪是什么意思?

顺便说一下,你也需要在你的 if 块中这样做,否则你的第二个 {IF} 中的 {ELSE} 会导致同样的问题

相关内容

最新更新