美文网首页
模板字符串

模板字符串

作者: 田成力 | 来源:发表于2019-10-09 20:41 被阅读0次

模版引擎

自己实现一个类似于EJS的模版引擎
核心原理是:
1.正则表达式代替字符串
2.使用with包裹作用域
3.为了作用域的干净使用new Function()形成一个独立的函数作用域
4.各种代替字符串

let fs = require('fs');
let templateContent = fs.readFileSync('./template.html').toString();
// console.log(templateContent);

// 最基本的字符串代替:<%%>
function render(content, obj) {
  content = content.replace(/\<\%(.+?)\%\>/g, function () {
    return obj[arguments[1]];
  })
  return content;
}

//有 <%=%>js函数的模版引擎
function render(content, obj) {
  let head = ``;
  let body = ``;
  let tail = ``;
  head = `
    let str = ''
    with (obj) {
  `;

  body = 'str+=`' + content + '`';
  body = body.replace(/\<\%([^=]+?)\%\>/g, function () {
    return '${'+arguments[1]+'}';
  });
  body = body.replace(/\<\%\=(.+?)\%\>/g, function () {
    return '`;' + arguments[1] + '\r\n str+=`';
  })

  tail = ` }; return str; `;
  
  let fn = new Function('obj', head + body + tail);
  return fn(obj);
}

let newContent = render(templateContent, { name: "zhangsan", age: 19,list:[1,2,3] });
console.log(newContent);

相关文章

  • ES6-字符串方法及其实现

    1.模板字符串 模板字符串替换+操作符,来拼接字符串,并且支持换行: 标签模板: 标签模板其实不是模板,而是函数调...

  • ECMAScript6 学习(一)

    字符串的扩展 字符串的遍历器接口for...of循环 模板字符串 字符串中嵌入变量 标签模板 模板字符串可以紧跟在...

  • es6

    1.模板字符串 $().append(` `) 添加模板字符串,模板字符串中嵌入变量,需要将变量名写在${}之中。...

  • ES6常用新特性

    ES6新特性介绍 模板字符串 模板字符串实现字符串拼接 模板字符串实现多行字符串 结构赋值 对象的解构赋值 数组的...

  • ES6字符串扩展

    字符串的Unicode表示法 字符串的遍历器接口 模板字符串` 长字符串换行 变量拼接 嵌套模板 带标签的模板字符...

  • ES6之模板字符串

    说明: 通过 ${ letName } 使模板字符串支持插值 模板字符串必需要用反 撇号(`) 括起来 模板字符串...

  • ES6-字符串模板

    模板字符串使用案例一 标签模板字符串 标签模板字符串案例 标签函数的用途,可以用来过滤用户输入

  • es6小结

    模板字符串字符串拼接不需要+,而是用``,变量用${变量名}表示 Tips:模板字符串里的变量的值取模板字符串定义...

  • ES6(4)、新版字符串

    1、模板字符串 模板字符串使用反引号 (``) 来代替普通字符串中的用双引号和单引号。模板字符串可以包含特定语法(...

  • 模板字符串

    title: 模板字符串date: 2016-11-21 15:04:36tags: [js] 模板字符串 模板字...

网友评论

      本文标题:模板字符串

      本文链接:https://www.haomeiwen.com/subject/syhnpctx.html