求助!js正则替换高手!

新手上路,请多包涵

我有一个问题

   var str = 'aaabbbcccdddaaabbbcccddd'
    str.replace(/(aaa|bbb)/g, (_, m) => m === 'aaa' ? 'bbb': 'aaa' ).replace(/(ccc|ddd)/g,(_,m=>m)==='ccc'?'ddd':'ccc');

这样可以让字符串中的aaa/bbb和ccc/ddd相互替换

但是,我想用键值对的形式来表示要相互替换的内容,比如

 arr = {
    'aaa':'bbb',
    'ccc':'ddd'
        …
}

来表示要相互替换的内容
而replace里的内容用变量代替,只要增减键值对就能改变要替换的内容。

这个方法该怎么写呢?

阅读 1.8k
3 个回答
const str = 'aaabbbcccdddaaabbbcccddd';
const arr = {
    'aaa':'1',
    'ccc':'2',
    'bbb': '3',
    'ddd': '4'
};
const arrStr = `(${Object.keys(arr).join('|')})`;
const d = str.replace(new RegExp(arrStr, 'g'), m => arr[m]);
var str = 'aaabbbcccdddaaabbbcccddd';
var map = {'aaa':'bbb','ccc':'ddd'};
var mapx = {}
var arrReNode = [];
var key, val;
for(key in map)
{
    val = map[key];
    mapx[key] = val;
    mapx[val] = key;
    arrReNode.push(key); // 如果有正则特殊字符,自己处理下
    arrReNode.push(val); // 如果有正则特殊字符,自己处理下
}
var re = new RegExp('('+arrReNode.join('|')+')', 'g');
str.replace(re, function($m1){return mapx[$m1]});

假设你需要把aaa=>bbb,ccc=>ddd

用键值对表示为

var obj = {
    'aaa':'bbb',
    'ccc':'ddd'
}

可以使用如下方法来替换

var str = 'aaabbbcccdddaaabbbcccddd';
var obj = {
    'aaa':'bbb',
    'ccc':'ddd'
}
var keys = Object.keys(obj).join('|'); //=>aaa|ccc
var reg = new RegExp('('+keys+')','g') //正则
str.replace(reg,function(a){ //替换
    return obj[a];
})

clipboard.png

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题