我试图做一个正则表达式替换,以便从一个相当长的列表中将连字符插入到每组单词对中。简单地说,我想作出以下转变:
我最初的想法是这样做:
str.replace(/((double) (blind)|(cost) (effective))/g,"$2-$3");但是,引用指向绝对子模式索引,因此“成本效益”将被删除,而不是连字符,因为第二子模式和第三子模式不匹配。我需要引用第一和第二匹配子模式的东西。对于Javascript正则表达式,这是可能的吗?
谢谢。
发布于 2014-02-08 02:05:43
你可以做一些下流的事
str.replace(/((double) (blind)|(cost) (effective))/g,"$2$4-$3$5");如果您想要更清楚一些,那么使用回调作为replace的第二个参数可能是可行的。
但是,我想不出有一种方法可以让$2引用第一个匹配,而$3引用第二个匹配,不管您匹配哪一个选项。
发布于 2014-02-08 02:17:30
var regex = /(double blind|cost effective)/g;
"double blind blahy blah cost effective".replace(regex, function (match) { return match.replace(" ", "-") });您可能可以通过一个连接将所有短语添加到regex中:
var phrases = ['double blind', 'cost effective'];
var regex = new RegExp("(" + phrases.join("|") + ")", "g")诸若此类。不过,我不知道与单纯使用迭代替换相比,您是否得到了那么大的改进。
https://stackoverflow.com/questions/21640913
复制相似问题