作家
登录

只有20行Javascript代码!手把手教你写一个页面模板引擎

作者: 来源: 2017-07-19 16:16:57 阅读 我要评论

 
  •  
  •  
  • 不过我们可以看见,返回的数组仅仅包含第一个匹配项。我们须要用while轮回把上述逻辑包起来,如许才能获得所有的匹配项。

    1. var re = /<%([^%>]+)?%>/g; 
    2.  
    3.   while(match = re.exec(tpl)) { 
    4.  
    5.   console.log(match); 
    6.  
    7.  

    如不雅把膳绫擎的代码跑一遍,你就会看见<%name%> 和 <%age%>都被打印出来了。

    下面,有意思的部分来了。辨认出模板中的匹配项后,我们要把他们调换成传递给函数的实际数据。最简单的办法就是应用WordStr函数。我们可以像如许来写:

    1.  
    2.   name"Krasimir Tsonev"
    3.  
    4.   profile: { age: 29 } 
    5.  
    6.  

    不过直接如许子写的话还不克不及跑,因为在模板中应用<%profile.age%>的话,代码会被调换成data[‘profile.age’],结不雅是undefined。如许我们就不克不及简单地用WordStr函数,而是要用其余办法。如不雅可以或许在<%和%>之间直接应用Javascript代码就最好了,如许就能对传入的数据直接求值,像下面如许:

    1. var template = '<p>Hello, my name is <%this.name%>. I\'m <%this.profile.age%> years old.</p>'

    你可能会好奇,这是怎么实现的?这里John应用了new Function的语法,根据字符串创建一个函数。我们不妨来看个例子:

    1. var fn = new Function("arg""console.log(arg + 1);"); 
    2.  
    3. fn(2); // outputs 3  

    fn可是一个货真价实的函数。它接收一个参数,函数体是console.log(arg + 1);。上述代码等价于下面的代码:

    1. var fn = function(arg) { 
    2.  
    3.   console.log(arg + 1); 
    4.   
    5.  
    6. fn(2); // outputs 3  
    1. var re = /<%([^%>]+)?%>/g, 
    2.  
    3. reExp = /(^( )?(if|for|else|switch|case|break|{|}))(.*)?/g, 
    4.  
    5. code = 'var r=[];\n'
    6.  
    7. cursor = 0; 
    8.  
    9. var add = function(line, js) { 
    10.  
    11.   js? code += line.match(reExp) ? line + '\n' : 'r.push(' + line + ');\n' : 
    12.  
    13.   code += 'r.push("' + line.WordStr(/"/g, '\\"') + '");\n'
    14.  
    15.  

    1.   推荐阅读

        人工智能与机器学习有哪些不同

      【技巧沙龙】AI开辟者拭魅战营-7分钟打造1个定制技能。7月22号,我们等你一路! 传统的机械进修 【51CT>>>详细阅读


      本文标题:只有20行Javascript代码!手把手教你写一个页面模板引擎

      地址:http://www.17bianji.com/lsqh/36297.html

    关键词: 探索发现

    乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

    网友点评
    自媒体专栏

    评论

    热度

    精彩导读
    栏目ID=71的表不存在(操作类型=0)