我正在尝试进行正则表达式替换,以便从相当长的列表中将连字符插入到每组单词对中。简单地说,我想进行这些转换:
我最初的想法是这样做:
str.replace(/((double) (blind)|(cost) (effective))/g,"$2-$3");
但是,引用指向绝对子模式索引,因此“成本有效”将被删除,而不是连字符,因为第二个和第三个子模式不匹配。我需要引用第一个和第二个MATCHED子模式的东西。使用Javascript正则表达式可以实现吗?
感谢。
答案 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")
等等。不过,我不知道你是否在简单地使用迭代替换方面取得了很大的进步。