html replace 全字匹配,JavaScript基于replace+正则实现ES6的字符串模版功能

本文介绍了如何使用JavaScript的replace方法和正则表达式来模拟ES6的字符串模板功能,解决了传统字符串拼接的不便,如书写不连贯、难以重用和无法充分利用HTML模板标签的问题。通过示例代码展示了如何创建一个函数实现模板渲染,并提供了扩展的ES6模板字符串API介绍。
摘要由CSDN通过智能技术生成

JavaScript基于replace+正则实现ES6的字符串模版功能

发布时间:2020-10-03 03:16:23

来源:脚本之家

阅读:109

作者:KongyunWu

本文实例讲述了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, slash2, token, slash3) {

//如果有转义的\{或\}替换转义字符

if (slash2 || slash3) {

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正则表达式在线测试工具:http://tools.jb51.net/regex/javascript

正则表达式在线生成工具:http://tools.jb51.net/regex/create_reg

更多关于JavaScript相关内容感兴趣的读者可查看本站专题:《ECMAScript6(ES6)入门教程》、《JavaScript正则表达式技巧大全》、《JavaScript字符与字符串操作技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript错误与调试技巧总结》及《JavaScript数学运算用法总结》

希望本文所述对大家JavaScript程序设计有所帮助。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值