说我有以下代码:
var str = "abcde";
str.replace("a", "ab")
str.replace("b", "c")
str
的值从abcde
到abbcde
到acccde
。如何让这两个操作同时发生,以便str
的值从abcde
变为abccde
?
答案 0 :(得分:1)
当替换包含这些类型的模式时,首先做的是独立的,然后是其他类似的模式。
var str = "abcde";
str.replace("b", "c");
str.replace("a", "ab");
或者使用一些地图替换它们:
var str = "abcde";
var mapObj = {
a:"ab",
b:"c"
};
str = str.replace(/a|b/gi, function(matched){
return mapObj[matched];
});
console.log(str);
输出:
abccde
答案 1 :(得分:1)
您需要将a
和b
与正则表达式匹配,然后使用函数来区分它是a
还是b
。 See documentation for the replace function.
var str = 'abcde'
var newStr = str.replace(/[ab]/g, function (match) {
switch (match) {
case 'a':
return 'ab'
case 'b':
return 'c'
default:
return '???' // or throw error
}
})
console.log(newStr) // -> abccde
如果您有要替换的字符串列表,您可能需要查看how to escape strings to be used in regular expressions,然后使用RegExp的构造函数构造要用于替换函数的正则表达式。
var replacements = {'a': 'ab', 'b': 'c'}
var keys = Object.keys(replacements)
// escapeRegExp function from https://stackoverflow.com/a/6969486/8557739
var escapedKeys = keys.map(escapeRegExp)
var re = RegExp(escapedKeys.join('|'), 'g') // re = /a|b/g
// then continue on like before
var str = 'abcde'
var newStr = str.replace(re, function (match) {
for (var key in replacements) {
if (match === key) {
return replacements[key]
}
}
return '???' // or throw error
})
console.log(newStr) // -> abccde
答案 2 :(得分:0)
var str =“abcde”; str.replace(/ A | B / gbbc);
你也可以使用这个正则表达式,因为它会将'a'替换为'b'而将'b'替换为'bc'。 如果你想为你的String全局应用这个正则表达式,那么你可以使用上面提到的'/ g',否则只是a / b之后。 要进行链条替换,请使用“|”我在a | b之间做过算子。
答案 3 :(得分:0)
我找到了一种使用数组的方法。
var str = "abcde";
var str2 = str.split("");
for(var i = 0; i < str2.length; i++){
if(str2[i] === "a"){
str2[i] = "ab"
} else if(str2[i] === "b"){
str2[i] = "c";
}
}