2012-05-02 53 views
1

我正在寫一個JavaScript函數,它需要一個正則表達式和一些元素,它與正則表達式匹配的名稱屬性。好的方法來做這個正則表達式替換

讓我們說我通過這個表達式

/cmw_step_attributes\]\[\d*\]/ 

和一個字符串,其構造是這樣

"foo[bar][]chicken[123][cmw_step_attributes][456][name]" 

,所有的數字可能會有所不同,或失蹤。我想對字符串正則表達式,以換出456的另一個號碼(這會有所不同),如789所以,我想與

"foo[bar][]chicken[123][cmw_step_attributes][789][name]" 

的正則表達式最終將匹配字符串匹配,但我不能換出789的整個正則表達式,因爲這會消除「[cmw_step_attributes] [」位。必須有一個乾淨而簡單的方法來做到這一點,但我不能把頭轉過來。有任何想法嗎?

感謝,最大

回答

2

捕獲的第一部分,並把它放回字符串。

.replace(/(cmw_step_attributes\]\[)\d*/, '$1789'); 
// note I removed the closing ] from the end - quantifiers are greedy so all numbers are selected 
// alternatively: 
.replace(/cmw_step_attributes\]\[\d*\]/, 'cmw_step_attributes][789]') 
+0

感謝@Kolink。那裏的'$ 1'是怎麼處理的? –

+0

'$ 1'是對捕獲的子模式的引用,在本例中爲'cmw_step_attributes \] \ ['。 –

1

字面上重寫必須在替換字符串中保持不變的部分,或將其放在捕獲括號內並引用它替換。

1

你試過:

var str = 'foo[bar][]chicken[123][cmw_step_attributes][456][name]'; 
str.replace(/cmw_step_attributes\]\[\d*?\]/gi, 'cmw_step_attributes][XXX]'); 
+0

這將工作,但我怎麼動態做到這一點,即如果我可以通過任何正則表達式來匹配字符串,並且想要切換\ d部分? –

+0

@MaxWilliams如此喜歡任何替代'cmw_step_attributes'的東西? – Petah