实现一个简单的字符串模版

先了解以下什么是字符串模版(模板引擎)//www.greatytc.com/p/da57098f992a
目标:需要将字符串中所有使用花括号括起来的关键词,同义替换为对象字面量中对应的键值。

字符串: '<a href={{href}}>{{text}}</a>'

对象字面量:{href:'blog.hackerwen.tech' ,text:'我的博客'}

结果: <a href="blog.hackerwen.tech">我的博客</a>

render.js

function render(template,context) {
// 准备正则 匹配至少一个 字母
// 正则的 开始是 {{  结束是 }}
// 中间的 小括号 可以对 正则 筛选出来的 字符串 再次筛选
  var reg = /{{(\w+)}}/;
// 准备挖好坑的字符串
  var template = template;
// 准备 用来填坑的 对象
  var context = context;
// 首先 使用正则对象 验证一次 字符串 while 会看 result 是否有值
// 这一次 找到的 有两个值
/* 
    第一个  {{href}} 索引为0
    第二个 href  索引为1,小括号找到的
*/
  var result;
  while( result = reg.exec(template)){
      console.log(result);// 0:{{href}} 1:href
      // 获取 匹配的 key(href)
      var key = result[1];
      // 通过key 获取value
      var value = context[key];
      // 替换  替换的是 {{href}}
     template = template.replace(result[0],value);
  }
  // 执行完毕 
  return template;
}

index.html

//导入写好的函数
<script type="text/javascript" src='render.js'></script>
//定义模版
<script type="text/template" id='template'>
    <a href="{{href}}">{{text}}</a>
</script>
<script type="text/javascript">
// 通过标签获取模版
var templateDom = document.querySelector("#template");
var template = templateDom.innerHTML;
console.log(str);//<a href="{{href}}">{{text}}</a>

// 准备对象
var context = {
    href:"http://blog.hackerwen.tech",
    text:"我的博客"
}
// 进行替换
var resultStr = render(template,context);
console.log(resultStr);
// 添加到页面上
document.body.innerHTML = resultStr;
</script>

对正则表达式小括号使用方法不清楚的同学可以戳这里

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,122评论 6 505
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,070评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,491评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,636评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,676评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,541评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,292评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,211评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,655评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,846评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,965评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,684评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,295评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,894评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,012评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,126评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,914评论 2 355

推荐阅读更多精彩内容

  • 一、字符串在C#中,字符串是一系列不可修改的Unicode字符,创建字符串后,就不能修改它。要创建字符串,最常用的...
    CarlDonitz阅读 1,283评论 0 2
  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    大学一百阅读 3,233评论 0 4
  • 本文介绍 Ruby 基本的数据类型,主要参考《Ruby编程语言》。Ruby支持的数据类型包括基本的Number、S...
    零小白阅读 12,146评论 0 11
  • 亲爱的张先森: 昨天晚上当你回家,我打开你手里说是买给我吃的零食的时候,惭愧和自我埋怨就从心底涌出,对于一个不吃甜...
    二衡阅读 436评论 0 2
  • 毕淑敏那篇《提醒幸福》我曾读过不止一遍。她认为,幸福需要提醒,因为,人们常常只是在幸福的金马车已经驶过去很远,捡起...
    握瑜阅读 1,105评论 29 23