正则表达式引用“相对”子模式

时间:2014-02-08 01:53:43

标签: javascript regex

我正在尝试进行正则表达式替换,以便从相当长的列表中将连字符插入到每组单词对中。简单地说,我想进行这些转换:

  • 双盲 - >双盲
  • 成本效益 - >成本有效

我最初的想法是这样做:

str.replace(/((double) (blind)|(cost) (effective))/g,"$2-$3");

但是,引用指向绝对子模式索引,因此“成本有效”将被删除,而不是连字符,因为第二个和第三个子模式不匹配。我需要引用第一个和第二个MATCHED子模式的东西。使用Javascript正则表达式可以实现吗?

感谢。

2 个答案:

答案 0 :(得分:0)

你可以做点像

这样的事情
str.replace(/((double) (blind)|(cost) (effective))/g,"$2$4-$3$5");

如果你想要更清楚一点,那么使用回调作为replace的第二个参数可能是要走的路。

但我想不出让$2引用第一场比赛的方法,$3引用第二场比赛,无论你选择哪两个选项。

答案 1 :(得分:0)

var regex = /(double blind|cost effective)/g;
"double blind blahy blah cost effective".replace(regex, function (match) { return match.replace(" ", "-") });

您可以通过联接将所有短语都粘贴在正则表达式中:

var phrases = ['double blind', 'cost effective'];
var regex = new RegExp("(" + phrases.join("|") + ")", "g")

等等。不过,我不知道你是否在简单地使用迭代替换方面取得了很大的进步。