Alan's blog Alan's blog
首页
思考感悟
技术学习
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

Alan wu

前端小时
首页
思考感悟
技术学习
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 前端常考代码

    • 模版字符串
    • 版本比较
    • 洗牌算法
    • 大数相加或相乘
    • 防抖或节流
    • 并发请求
  • LeetCode Top 100

  • 算法
  • 前端常考代码
alanwu
2023-06-14

模版字符串

ES6模板字符串使开发者省去了用“+”号拼接的繁琐且易错的开发模式

let str1 = 'abc', str2 = 'def' 
console.log(第一个字符串是${str1},第二个字符串是${str2})  
1
2

首先肯定是需要用到正则,正则写出来了,直接字符串替换就完成了,现在先要匹配 ${},然后把${}中的变量取到

// 1.创建一个正则表达式 
let args = //  
// 2.从${}中取值 
let args = /${}/  
// 3.由于$、{、}都是有特殊含义的,所以需要转义
let args = /\$\{\}/  
// 4.现在要将${}中的变量名取到,所以需要使用()  
正则圆括号: 
(1). 在被修饰匹配次数的时候,括号中的表达式可以作为整体被修饰 
(2). 取匹配结果的时候,括号中的表达式匹配到的内容可以被单独得到
let args = /\$\{()\}/  
// 5.变量名可能是任意的字符  匹配任意的是 . 变量的名称可能是多个字符 所以需要用到 + 还需要全局匹配 
let args = /\$\{(.+)\}/g  
// 6. 步骤5中的正则 是贪婪模式的: 如果存在多个${} 那第一次就把所有匹配到的内容都拿到,是这样的 
1
2
3
4
5
6
7
8
9
10
11
12
13
14

现在不想使用贪婪模式,加?可以使其变为惰性的,取到1次就不再取了

// 惰性的正则  
let args = /\$\{(.+?)\}/g   
// 实现strParse函数 
function strParse(string) {    
  let args = /\$\{(.+?)\}/g
  return string.replace(args, function(){
    return eval(arguments[1])
  })
} 
1
2
3
4
5
6
7
8
9

测试一下:

let str1 = 'abc', str2 = 'def';
console.log(`第一个字符串是${ str1},第二个字符串是${str2}`);
// 第一个字符串是abc,第二个字符串是def
let esStr = '第一个字符串是${ str1},第二个字符串是${str2}';
function strParse(string) {  
    let args = /\$\{(.+?)\}/g     
    return string.replace(args, function(){    
        return eval(arguments[1]);  
    })
}
let str = strParse(esStr);
console.log(str) 
// 第一个字符串是abc,第二个字符串是def

1
2
3
4
5
6
7
8
9
10
11
12
13
14
编辑 (opens new window)
上次更新: 2023/06/15, 08:09:17
版本比较

版本比较→

最近更新
01
HTTPS:让数据传输更安全
06-15
02
沙盒:页面和系统之间的隔离墙
06-15
03
CSRF攻击:陌生链接不要随便点
06-15
更多文章>
Theme by Vdoing | Copyright © 2019-2023 Alan Wu | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式