正则使用总结

在正则中如何插入变量

  • 需求: 去掉英文字母后面的数字,数字是变化的,可能是字母,也可能是不确定的变量;

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    const 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
    3
    const str = 'region + 变量 ';
    const reg = /([a-z]+)(变量)/;
    const newStr = str.replace(reg, (...arg) => arg[1]);
  • 第二种写法: 可以在正则中写入变量,利用es6模板字符串将变量拼入正则中

    1
    2
    const 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;
    })
-------------本文结束感谢您的阅读-------------