Javascript 如何使用正则表达式处理模板并忽略转义字符?

Javascript 如何使用正则表达式处理模板并忽略转义字符?,javascript,regex,Javascript,Regex,我已经写了一段时间的模板处理器,我决定修改它以支持我计划的新特性。这些特性之一是忽略转义字符。不幸的是,我不知道我在做什么这是一个学习的努力 首先,我编写了一个正则表达式来处理这个测试字符串,使用负lookaheads。不过,它似乎不太管用——它将占据主导地位,我不知道为什么。如果第一个括号上只有一个反斜杠,而不是第一个和最后一个括号上的反斜杠,那么它也会正常处理字符串 Lorum \{#variable} ipsum {#variable\} dolor \{#variable} ismet

我已经写了一段时间的模板处理器,我决定修改它以支持我计划的新特性。这些特性之一是忽略转义字符。不幸的是,我不知道我在做什么这是一个学习的努力

首先,我编写了一个正则表达式来处理这个测试字符串,使用负lookaheads。不过,它似乎不太管用——它将占据主导地位,我不知道为什么。如果第一个括号上只有一个反斜杠,而不是第一个和最后一个括号上的反斜杠,那么它也会正常处理字符串

Lorum \{#variable} ipsum {#variable\} dolor \{#variable} ismet {#variable} lorum ipsum.
这是使用的表达式:

(?![\\])[^\\][{}]#([^{}]+)}
如果纯正则表达式不容易做到这一点,那么我使用的是JavaScript,因此其他选项当然是开放的。但是,我不想使用模板引擎,因为这是一个教育项目

这段代码将用作其他几个匹配的基础,因此它也可以用于{%RandomOne | randomtowwith{var}| randomtowwith{var}| randomtree}非常重要,尽管我理解这要复杂得多,但理想情况下,它将被单独处理{?如果1=1}First{var}{elseif 1=2}{%randomtowone | randomtowwith{var}| randomtowwith}randomtoo randomtree else}Blank{?endif}


我完全知道正则表达式的这种使用可能是次优的,事实上,我很高兴听到一种更有效的处理这种数据的方法。在这种情况下,似乎if语句是最复杂的处理方式。

regex可以完成这项工作,如果你有权访问,比如说PCRE…但是JavaScript regex可以e对此太弱了。这里真正的问题是嵌套的大括号。忽略转义字符通常很容易,即使使用最基本的正则表达式也是如此。一个复杂而真实的示例:。格式为分隔符非转义字符|转义序列*分隔符