笔试之 模板变量替换

js中正则短小精悍,断言不匹配,匹配可捕获,捕获能引用,全局都来一次。

问题

已知含有n个变量的字符串,要求将变量替换为对应的值,如 n o = 5 , no=5, no=5,title=‘jack’

<div> <p> {$no}</p> <p> {$title}</p> </div>

思路

  1. 定义正则查找$ 字符串变量
  2. 构建变量键与变量值的映射对象
  3. 使用原生 replace 函数进行正则替换,避免循环

实现

str = "<div> <p> {$no}</p> <p> {$title}</p> </div>"
// 1. 创建正则实例
var re = /(?<=\{)(\$\w+)(?=\})/g
// 2. 构建替换对象
var o = {'no':5, 'title':'jack'}
// 3.执行替换
var res = str.replace(re, m => o[m.substr(1)])
// 4.测试
console.log(str)
console.log(res)

效果

<div> <p> {$no}</p> <p> {$title}</p> </div>
<div> <p> {5}</p> <p> {jack}</p> </div>

小结

全局正则,使用了前后向断言,中间匹配捕获。
原生replace方法,避免过多使用循环,巧妙使用对象键值对映射特性,实现值替换。
正则括号内以问号为前导是为断言,用于辅助匹配,而匹配是助力捕获,捕获通常是为了引用。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值