如何用单个正则表达式替换几个子串?

时间:2013-10-13 15:38:29

标签: javascript regex

有一个包含以下某些子字符串的源字符串:

  • “第一”
  • “第二”

有必要相应地替换它们

  • “第三”
  • “所述”

我按照以下方式这样做

var output = input;

var re1 = /first/;
var re2 = /second/;

output = output.replace(re1, "third")
output = output.replace(re2, "forth")

问题是如何用单个正则表达式做到这一点?

3 个答案:

答案 0 :(得分:2)

您可以使用传递给.replace()的函数来执行此操作:

output = output.replace(/first|second/g, function(word) {
  return word === "first" ? "third" : "fourth";
});

答案 1 :(得分:1)

除非你把一个函数作为第二个参数传递,否则是不可能的。

var a =function(a){if(a=="first"){ a="third" }else{ a="forth"} return a}
output = output.replace(/first|second/g, a);

然后你也可以写一个班轮。

output = output.replace(/first/g, "third").replace(/second/g, "forth");

答案 2 :(得分:1)

你可能会做这样的事情;使用匿名函数:

var input = "This is the first... no second time that I tell you this!";
var result = input.replace(/first|second/g, function(m) {
    switch(m)
    {
    case "first":
      return "third";
    case "second":
      return "forth";
    }
});

jsfiddle

变量m将包含匹配项,并传递给switch,您可以根据需要添加更多替换项。