我四处搜寻,找不到真正有效的。
在Mustache中,当你掷出2个卷曲时,里面的字符串将被转义,如果你扔3,它就不会。
// when you pass {foo: '"bar"'} as hash, the following template will be:
{{foo}} // => "bar"
{{{foo}}} // => "bar"
正确?所以我创建了以下内容。
http://jsfiddle.net/beatak/6s5PU/
,这显示插值和逃避相反,意味着未转义为未转义的3卷曲。当我在escape
中的interpolate
和_.templateSettings
之间切换时,它就无效了。为什么?下划线模板优先于这三个(escape
,interpolate
和evaluate
)?
我知道我现在在jsfiddle上忽略了evaluate
,如果这种方法一起工作会很棒,但是现在,我想让2和3卷曲的作品很好......
答案 0 :(得分:2)
搜索转义的正则表达式,然后进行插值,然后求值。这就是为什么您的转义表单{{ }}
在未转义的表单{{{ }}}
之前匹配的原因。您可以在_.template
。
var matcher = new RegExp([
(settings.escape || noMatch).source,
(settings.interpolate || noMatch).source,
(settings.evaluate || noMatch).source
].join('|') + '|$', 'g');
更改上述行的顺序将改变优先级。
如果您不想更改下划线优先级,则可以使用更复杂的转义正则表达式。如果没有消极的后视,这很棘手,但我提出了:
/\{\{([^\{\}]+?)(?!\}\}\})\}\}/
应该表示:{{
,后面跟着一个或多个非大括号字符,后面跟不上三重括号(}}}
),然后是双重大括号}}
。它适用于你的小提琴,希望能为你效劳。