更改模板标签 <# {% {{ 等后,John Resig 的微模板出现语法错误

2024-05-11

我在使用 John Resig 的 Micro 模板时遇到了一些麻烦。

谁能帮我解释为什么它不起作用?

这是模板

<script type="text/html" id="row_tmpl">
test content {%=id%} {%=name%}
</script>

以及发动机的改装部分

str
      .replace(/[\r\t\n]/g, " ")
      .split("{%").join("\t")
      .replace(/((^|%>)[^\t]*)'/g, "$1\r")
      .replace(/\t=(.*?)%>/g, "',$1,'")
      .split("\t").join("');")
      .split("%}").join("p.push('")
      .split("\r").join("\\'")
  + "');}return p.join('');");

和 JavaScript

var dataObject = { "id": "27", "name": "some more content" };
var html = tmpl("row_tmpl", dataObject);

结果,正如您所看到的 =id 和 =name 似乎位于错误的位置?除了将模板语法块从 更改为 {% %} 之外,我没有更改任何内容。

这是来自火狐浏览器。

Error: syntax error
Line: 30, Column: 89
Source Code:
var p=[],print=function(){p.push.apply(p,arguments);};with(obj){p.push(' test content ');=idp.push(' ');=namep.push(' ');}return p.join('');

要更改 John Resig 的微模板库中的标签,您必须更改原始代码中的两个 split() 调用和两个正则表达式。

例如,将原始标签 更改为 {{= }} 的操作如下

//ORIGINAL
str
  .replace(/[\r\t\n]/g, " ")
  .split("<%").join("\t")              //CHANGE string "<%"
  .replace(/((^|%>)[^\t]*)'/g, "$1\r") //CHANGE expression /((^|%>)[^\t]*)'/g
  .replace(/\t=(.*?)%>/g, "',$1,'")    //CHANGE expression /\t=(.*?)%>/g
  .split("\t").join("');")             
  .split("%>").join("p.push('")        //CHANGE string "%>"
  .split("\r").join("\\'")

//INTO
str
  .replace(/[\r\t\n]/g, " ")
  .split("{{").join("\t")                //INTO string "{{"
  .replace(/((^|\}\})[^\t]*)'/g, "$1\r") //INTO expression /((^|\}\})[^\t]*)'/g
  .replace(/\t=(.*?)\}\}/g, "',$1,'")    //INTO expression /\t=(.*?)\}\}/g
  .split("\t").join("');")
  .split("}}").join("p.push('")          //INTO string "}}"
  .split("\r").join("\\'")

在引擎中更改正则表达式时要小心,必须转义特殊字符。在 javascript 风格的正则表达式中,这些是: \ / [ ] ( ) { } ? + * | 。 ^$ 通过在它们前面加上“\”前缀来转义它们。这不适用于分割参数,因为在这种情况下它们不是正则表达式。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

更改模板标签 <# {% {{ 等后,John Resig 的微模板出现语法错误 的相关文章

随机推荐