JavaScript基于replace+正则实现ES6的字符串模版功能
本文实例讲述了javascript基于replace+正则实现es6的字符串模版功能。分享给大家供大家参考,具体如下:
采用拼接字符串的形式,将 json 数据嵌入 html 中。开始时代码量较少,暂时还可以接受。但当页面结构复杂起来后,其弱点开始变得无法忍受起来:
书写不连贯。每写一个变量就要断一下,插入一个 + 和 “。十分容易出错。
无法重用。html 片段都是离散化的数据,难以对其中重复的部分进行提取。
无法很好地利用 标签。这是 html5 中新增的一个标签,标准极力推荐将 html 模板放入 标签中,使代码更简洁。
replace+正则实现
项目刚开始用的数据拼接
function formatstring() { if (arguments.length === 0) return null; var str = arguments[0]; for (var i = 1; i < arguments.length; i++) { var re = new regexp('\\{' + (i - 1) + '\\}', 'gm'); str = str.replace(re, arguments[i]); } return str; },
第一个参数为需要渲染的数据模板,其他参数为数据:
formatstring('{0},my name is {1}', 'everyman', '吴孔云')
这种后期维护较麻烦,一旦更改顺序,都需要更改~~就跟函数需要接收一大串参数一样,我们尽量写成对象的形式,
var myobject = maker(f,l,m,c,s);//不建议写法 var myobject = maker({//建议写法 first : f, last: l, state:s, city:c });
在网上搜索看到一个例子,可以类似实现es6的字符串模版形式,博客是一个高中生写的, 。
function render(template, context) { //被转义的的分隔符 { 和 } 不应该被渲染,分隔符与变量之间允许有空白字符 var tokenreg = /(\\)?\{([^\{\}\\]+)(\\)?\}/g; return template.replace(tokenreg, function (word, slash1, token, slash2) { //如果有转义的\{或\}替换转义字符 if (slash1 || slash2) { return word.replace('\\', ''); } // 切割 token ,实现级联的变量也可以展开 var variables = token.replace(/\s/g, '').split('.'); var currentobject = context; var i, length, variable; for (i = 0, length = variables.length; i < length; ++i) { variable = variables[i]; currentobject = currentobject[variable]; // 如果当前索引的对象不存在,则直接返回空字符串。 if (currentobject === undefined || currentobject === null) return ''; } return currentobject; }) } string.prototype.render = function (context) { return render(this, context); }; "{greeting}! my name is { author.name }.".render({ greeting: "hi", author: { name: "hsfzxjy" } }); // hi! my name is hsfzxjy.
扩展:es6字符串模版api
es6引入了一种新型的字符串字面量语法,我们称之为模板字符串(template strings)。除了使用反撇号字符 ` 代替普通字符串的引号 ' 或 ” 外,它们看起来与普通字符串并无二致。
var a = 'kenny' `my name is ${a}` //"my name is kenny"
可以用bable编译成es5。
ps:这里再为大家提供2款非常方便的正则表达式工具供大家参考使用:
javascript正则表达式在线测试工具:
正则表达式在线生成工具:
更多关于javascript相关内容感兴趣的读者可查看本站专题:《ecmascript6(es6)入门教程》、《javascript正则表达式技巧大全》、《javascript字符与字符串操作技巧总结》、《javascript数据结构与算法技巧总结》、《javascript错误与调试技巧总结》及《javascript数学运算用法总结》
希望本文所述对大家javascript程序设计有所帮助。
上一篇: 诗句填空是李白的
下一篇: 3分钟掌握常用的JS操作JSON方法总结