2014-02-08 23 views
1

我想做一個正則表達式替換,以便連字符被插入到每對詞組中,從一個相當長的列表中。簡單地說,我要進行這些轉換:引用「相對」子模式的正則表達式

  • 雙盲 - >雙盲
  • 成本效益 - >高性價比

我最初的想法是要做到這一點:

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

但是,引用指向絕對子模式索引,因此「成本有效」將被刪除,而不是連字符,因爲第二個和第三個子模式不匹配。我需要引用第一個和第二個MATCHED子模式的內容。這是可能的Javascript正則表達式嗎?

謝謝。

回答

0

你可以做些什麼樣的低俗像

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

如果你想更清楚一點,然後使用回調作爲第二個參數replace可能是要走的路。

但我想不出有什麼辦法可以讓$2指向第一個匹配,$3指的是第二個匹配,無論您匹配的兩個選項中的哪一個。

+0

謝謝 - 使用回調作爲替換的第二個參數適用於我。 –

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") 

等。儘管如此,我不知道你是否在簡單地使用迭代替換方面獲得了很大的改進。