我一直在编写模板处理器,我决定修改它以支持我计划的新功能。其中一个功能是忽略转义字符。不幸的是,我不知道我在做什么(这是一项学习努力)。
首先,我编写了一个正则表达式来处理这个测试字符串,使用负向前瞻。但它似乎没有正常工作 - 它会占领领先的空间,我不知道为什么。如果第一个括号中只有一个反斜杠,而不是第一个和最后一个括号,它也会正常处理字符串。
Lorum \{#variable} ipsum {#variable\} dolor \{#variable} ismet {#variable} lorum ipsum.
这是使用的表达式:
(?![\\])[^\\][{}]#([^{}]+)}
如果使用纯正则表达式不容易做到这一点,我使用JavaScript,所以其他选项肯定是开放的。但是,我不想使用模板引擎,因为这是一个教育项目。
这个相同的代码将被用作其他几个匹配的基础,因此重要的是它也可以用于{%RandomOne|RandomTwoWith{#var}|RandomThree}
和(虽然我知道这更复杂,所以理想情况下它会是单独处理){?if 1=1}First {#var}{?elseif 1=2}{%RandomOne|RandomTwoWith{#var}|RandomThree}{?else}Blank{?endif}
我完全清楚这种正则表达式的使用可能是次优的,我很高兴(事实上,渴望)听到一种更有效的方法来处理这些数据。在这种情况下,似乎是if语句是最复杂的。