在正则中如何插入变量
需求: 去掉英文字母后面的数字,数字是变化的,可能是字母,也可能是不确定的变量;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23const data = ['region', 'zone', 'buff_cnt'];
const obj = {
region23: 'hangzhou1',
regionnewTab: 'hangzhou2',
regionhahah: 'hangzhou3',
region78: 'hangzhou4',
zone23: 'shandong1',
zonenewTab: 'shandong2',
zonehahah: 'shandong3',
zone78:'shandong4',
buff_cnt23: 'beijing1',
buff_cntnewTab: 'beijing2',
buff_cnthahah: 'beijing3',
buff_cnt78: 'beijing4',
};
// 将上面这个对象转成数组如下:
=> arr = [
{region: 'hangzhou1', zone: 'shandong1', buff_cnt: 'beijing1'},
{region: 'hangzhou2', zone: 'shandong2', buff_cnt: 'beijing2'},
{region: 'hangzhou3', zone: 'shandong3', buff_cnt: 'beijing3'},
];第一种写法: 不能插入变量,变量会被解析成字符串
1
2
3const str = 'region + 变量 ';
const reg = /([a-z]+)(变量)/;
const newStr = str.replace(reg, (...arg) => arg[1]);第二种写法: 可以在正则中写入变量,利用es6模板字符串将变量拼入正则中
1
2const reg = new RegExp(`([a-z]+)(${变量})`)
const newStr = str.replace(reg, (...arg) => arg[1]);上面obj转成所需arr的解法
1
2
3
4
5
6
7
8
9
10
11
12[...Array(data.length).keys()].map(i => {
const judgeStr = data[i];~~~~
const reg = new RegExp(`([a-z]+)${judgeStr}`);
const params = {};
for (const n in obj) {
if(n.indexOf(judgeStr)) {
const newStr = n.replace(reg, (...arg) => arg[1]);
params[newStr] = obj[n];
}
}
return params;
})