同时更换多个部分的字符串

时间:2018-02-09 02:00:19

标签: javascript string replace

说我有以下代码:

var str = "abcde";
str.replace("a", "ab")
str.replace("b", "c")

str的值从abcdeabbcdeacccde。如何让这两个操作同时发生,以便str的值从abcde变为abccde

编辑:我说的是与此类似的任何情况,而不仅仅是这个具体情况。

4 个答案:

答案 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)

您需要将ab与正则表达式匹配,然后使用函数来区分它是a还是bSee 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";
    }
}