用正则表达式实现模板字符串匹配,
在javascript中,有模板语法,如I like ${a} and ${b}.

其中有变量,

1
let a='apple',b='banana';

对于上述字符串,最终会生成,
I like apple and banana.

可以用以下代码模拟实现的原理,

1
2
3
4
5
6
7
8
9
10
11
function fn(str, obj) {
//第二个参数支持回调函数,第一位是匹配的子串,第二位是捕获的字符串,因为正则里面只有一个括号,所以不需要p2;
//需要注意的是,虽然用到了全局匹配会匹配两次,但每次匹配成功都会先调用回调函数。
return str.replace(/\$\{(.*?)\}/g, (match, p1) => {
return obj[p1];
})
}
console.log(fn('i like ${b} and ${a}', {
a: 'apple',
b: 'banana'
}))

另一个案例

1
2
let str1 = '<div   class="father">   123</div>';
let str2 = str1.replace(/\s+/g, ' ').replace(/\>\s/, '>').replace(/\"/g, '\\"');

下一期,如何掌握正则表达式