如何在JavaScript中一次用其他多个字符串替换多个字符串? [重复]

问题描述 投票:2回答:2
我有一个字符串原型,其代码如下:

String.prototype.replaceAll = function(str1, str2, ignore) { return this.replace( new RegExp( str1.replace(/([\/\,\!\\\^\$\{\}\[\]\(\)\.\*\+\?\|\<\>\-\&])/g,"\\$&"),(ignore?"gi":"g")),(typeof(str2)=="string")?str2.replace(/\$/g,"$$$$" ):str2 )};

用法:

var a = "I am Javascript"; console.log( a.replaceAll("am", "love") ); // => I love Javascript

但是,关于字符或单词的多次交换,我必须多次运行原型才能实现。但我想到过这样的事情:

var a = "I am Java"; console.log( a.replaceAll(["am" , "Java"], ["love", "Javascript"]) ); // => I love Javascript

所以您能帮我实现它吗?还是有其他选择?
javascript regex string
2个回答
4
投票
我希望将替换项存储为对象中的键值对或成对的数组。不管采用哪种格式,都可以通过使用|替代连接要替换的值来动态创建正则表达式。然后为replace提供一个回调函数,并使用其match参数作为键在swaps对象中查找其对应对。

const s = "I am Java"; const swaps = {am: "love", Java: "JS"}; const pattern = new RegExp(Object.keys(swaps).join("|"), "g"); console.log(s.replace(pattern, m => swaps[m]));
要处理不区分大小写的替换,请确保swaps中的所有键都是小写字母(通过编程或手动,具体取决于用法),并在输入之前将匹配的字母小写:

const s = "I am Java"; const swaps = {am: "love", java: "JS"}; const pattern = new RegExp(Object.keys(swaps).join("|"), "gi"); console.log(s.replace(pattern, m => swaps[m.toLowerCase()]));

1
投票
这有效。

String.prototype.replaceAll = function(str1, str2, ignore) { let flags = 'g'; if (ignore) { flags += 'i'; } if (Array.isArray(str1) && Array.isArray(str2)) { let newStr = this; str1.map((element, index) => { if (str2[index]) { newStr = newStr.replace(new RegExp(element, flags), str2[index]); } return newStr; }); return newStr; } else { return this.replace(new RegExp(str1, flags), str2); } }

© www.soinside.com 2019 - 2024. All rights reserved.