繁体   English   中英

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

[英]Replace multiple parts of string simultaneously

说我有以下代码:

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

str的值从abcdeabbcdeacccde 我将如何使其同时执行两个操作,以使str的值从abcde变为abccde呢?

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

当replace包含此类模式时,请先执行独立的操作,然后再执行以下其他操作。

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

您需要将ab都匹配一个正则表达式,然后使用一个函数来区分它是a还是b 请参阅文档以了解替换功能。

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

如果您有要替换的字符串列表,则可能需要查看如何转义要在正则表达式中使用的字符串 ,然后使用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

var str =“ abcde”; str.replace(/ a | b / gbbc);

您也可以使用此正则表达式,因为它将用“ b”替换“ a”,用“ bc”替换“ b”。 如果您想为您的String全局应用此正则表达式,则可以使用上述的'/ g',否则在b之后的/即可。 要更换链条,请使用“ |” 就像我在a | b之间所做的那样。

我找到了一种使用数组的方法。

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";
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM