代码之家  ›  专栏  ›  技术社区  ›  Matthew Auld

使用Javascript IF-THEN-ELSE[duplicate]解析正则表达式

  •  0
  • Matthew Auld  · 技术社区  · 7 年前

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

    我一辈子都搞不清楚我做错了什么。我很快就能让它完美工作,但我不知道如何检查 {/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

    1 回复  |  直到 7 年前
        1
  •  1
  •   Luizgrs    7 年前

    您的问题是else block capture组的贪婪行为:

    ([\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块中这样做,否则第二个{if}中的{ELSE}将导致相同的问题