gpt4 book ai didi

javascript - 使用 Javascript 解析正则表达式 IF THEN ELSE

转载 作者:行者123 更新时间:2023-12-03 03:43:51 25 4
gpt4 key购买 nike

添加 Regex101 URL: https://regex101.com/r/7Pd1ri/1/

我花了大约 3 个半小时来解决这个问题。

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

我的正则表达式:

{IF\s*([^}]+)}([\s\S]+)(?:{\/ELSE})([\s\S]+){\/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 block 捕获组的贪婪行为:

([\s\S]+)

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

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

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

{IF\s*([^}]+)}([\s\S]+)(?:{\/ELSE})([\s\S]+?){\/IF}

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

有关此行为的更多详细信息,请参阅 What do lazy and greedy mean in the context of regular expressions?

顺便说一句,您也需要在 if block 中执行此操作,否则第二个 {IF} 中的 {ELSE} 将导致相同的问题

关于javascript - 使用 Javascript 解析正则表达式 IF THEN ELSE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45496650/

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