1

所以我打算使用John Resig's templating engineJohn Resig微模板錯誤

我需要傳遞函數一個包含「模板」的變量。然而,問題是,我需要通過這樣的:

<script> 
console.log("Double quotes"); 
</script> 
<script> 
console.log('single'); 
</script> 
<iframe src="http://example.com/?<%=SOME_VARIABLE%>" frameborder="0"></iframe> 
<div>I think I'm going to break</div> 
<% for (var i = 0; i < users.length; i++) { %> 
<li><a href="<%=users[i]%>"><%=users[i]%></a></li> 
<% } %> 
<iframe src='http://example.com/?<%=SOME_VARIABLE%>' frameborder="0"></iframe> 
<div>I think I"m going to break</div> 
<% for (var i = 0; i < users.length; i++) { %> 
<li><a href='<%=users[i]%>'><%=users[i]%></a></li> 
<% } %> 

,這似乎打破的事情是:

<script> 
console.log('single'); 
</script> 

隨着這段代碼正在通過它失敗的正則表達式通過。重要的是我能夠通過上述任何代碼並讓它不會中斷。有任何想法嗎?

回答

1

所以我碰到這篇文章具有此修復程序(也改變了<%%>到< ##來> FYI

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

http://weblog.west-wind.com/posts/2008/Oct/13/Client-Templating-with-jQuery