我正在书写的 JS 的模板引擎,需要使用正则表达式的手。

我有此类模板︰ <div>{{#if 1 > 2}}show this {{/if}}</div>

我是使用节点-htmlparser (https://github.com/tautologistics/node-htmlparser),我发现,一切顺利情况下除其中 < 或 > 是一对 mustaches 之间。我需要进行转义 < >,但只有当它们是一对 mustaches 之间,其余部分的 html 本身。我知道此可使用正则表达式,来实现,但我不知道如何。任何帮助非常感谢 !

2014-12-31 00:00:00
问题评论:

回答:

请尝试它分两个阶段︰

result = src.replace(/{{.*?}}/g,function(match) {
    return match.replace(/</g,"&lt;");
});

我手头没有任何体验与节点,但是,使我不能保证这会起作用。它应该,在理论上 !

节点是刚刚 JavaScript......

完美,正是我需要谢谢 !

请注意,此答案不只适用于><

是的我感谢点但中推断出该出

我有一些这种知识在这里︰ https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace

我,像第一次的答案中,找到了如何处理两个 regexes 更简单︰

var str = "<div>{{#if 1 > 2}}show this {{/if}}</div>";
var result = str.replace(/({{.*?)<(.*?}})/, "$1&lt;$2");
result = str.replace(/({{.*?)>(.*?}})/, "$1&gt;$2");

在每个$1表示第一个捕获组和$2秒。<>分别被替换为在每个转义文本。

请输入您的翻译

Escaping < & > between {{ }} without touching html

确认取消