我在JS中编写一个模板引擎,需要一个正则表达式。
我有这样的模板:
<div>{{#if 1 > 2}}show this {{/if}}</div>
我正在使用node-htmlparser(https://github.com/tautologistics/node-htmlparser)并发现它完美无缺,除了&lt;或者&gt;是在一对胡子之间。我需要逃避&lt;和&gt;但只有当它们位于一对胡须之间时,才会留下其余的html。我知道这可以通过正则表达式完成,但我不知道如何。任何帮助将不胜感激!
答案 0 :(得分:0)
尝试分两个阶段进行:
result = src.replace(/\{\{.*?\}\}/g,function(match) {
return match.replace(/</g,"<");
});
我没有任何使用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<$2");
result = str.replace(/(\{\{.*?)>(.*?\}\})/, "$1>$2");
每个$1
代表第一个捕获组,$2
代表第二个捕获组。 <
或>
分别用其转义文本替换。