javascript - underscore.template 的 _.templateSettings 的正确 mustache 模板配置是什么?

标签 javascript regex underscore.js mustache

我四处寻找,但找不到真正有效的。

在 Mustache 中,当你抛出 2 个 curly 时,里面的字符串将会被转义,如果你抛出 3 个,则不会。

// when you pass {foo: '"bar"'} as hash, the following template will be: 
 {{foo}}  // => "bar"
{{{foo}}} // => "bar"

对吗?所以我创建了以下内容。

http://jsfiddle.net/beatak/6s5PU/

这显示了插值和转义相反,意味着 2 curly 表示未转义 3 表示转义。当我在 _.templateSettings 中的 escapeinterpolate 之间切换时,它不起作用。为什么?下划线模板优先于这三个(escapeinterpolateevaluate)?

我知道我现在忽略了 jsfiddle 上的evaluate,如果它们一起工作那就太棒了,但现在,我想让 2 和 3 curl 工作得很好......

最佳答案

搜索转义的正则表达式,然后进行插值,然后求值。这就是为什么转义形式 {{ }} 在未转义形式 {{{ }}} 之前匹配。您可以在 _.template 的源代码中自行更改顺序。

var matcher = new RegExp([
  (settings.escape || noMatch).source,
  (settings.interpolate || noMatch).source,
  (settings.evaluate || noMatch).source
].join('|') + '|$', 'g');

更改以上行的顺序将更改优先级。

如果您不想更改下划线优先级,可以使用更复杂的转义正则表达式。没有消极的后视是很棘手的,但我想出了:

/\{\{([^\{\}]+?)(?!\}\}\})\}\}/

这应该意味着:{{,后跟一个或多个非大括号字符,后面不得跟三大括号(}}}),后跟双大括号 }}。它适用于您的 fiddle ,希望对您有用。

关于javascript - underscore.template 的 _.templateSettings 的正确 mustache 模板配置是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14267191/

相关文章:

regex - grep --ignore-case --only

javascript - 在 javascript 函数中使用类似 Haskell 的函数式累加器

javascript - 如何使用 $q.defer 链接 ajax 请求?

javascript - 如何在触发 'end' 事件之前使用 fast-csv 处理 Node js 中 csv 文件的最后一行?

regex - "infinite"URL 的正则表达式

javascript - 使用下划线将整个对象转换/包装为新对象

underscore.js - 使用 underdescore.js 进行过滤

javascript - Maven 的 Mocha 插件

javascript - 如何在div中添加对象

javascript - 正则表达式 Node javascript