逃脱< &安培; > {{}}之间没有触及html

时间:2014-12-31 22:19:29

标签: javascript regex node.js escaping

我在JS中编写一个模板引擎,需要一个正则表达式。

我有这样的模板: <div>{{#if 1 > 2}}show this {{/if}}</div>

我正在使用node-htmlparser(https://github.com/tautologistics/node-htmlparser)并发现它完美无缺,除了&lt;或者&gt;是在一对胡子之间。我需要逃避&lt;和&gt;但只有当它们位于一对胡须之间时,才会留下其余的html。我知道这可以通过正则表达式完成,但我不知道如何。任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:0)

尝试分两个阶段进行:

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

我没有任何使用Node的经验,所以我不能保证这会有用。理论上应该这样!

答案 1 :(得分:0)

我从这里得到了一些这方面的知识:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace

我和第一个答案一样,发现使用两个正则表达式更简单:

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代表第二个捕获组。 <>分别用其转义文本替换。