2010-03-03 31 views
0

我想用一個正則表達式替換html代碼的不同部分。JS/Ruby:使用正則表達式部分替換

對於爲例,我有這樣的文字:

option_!!NID!! [somme_text][5] some_text_option 5_option_some_text

使用這個正則表達式:

content.replace(/(!!NID!!)|\[(\d)\]|(\d)_option/g, 1))

我期望能獲得:

option_1 [somme_text][1] some_text_option 1_option_some_text

b UT我:

option_1 [somme_text]1 some_text_option 1_some_text

有人能告訴我怎麼做我想做的,使用單一的正則表達式?因爲我不明白爲什麼替換不僅替換括號之間的目標。

謝謝:)

PS:我使用的是洛爾所以紅寶石和JS的解決方案也是可能的。

回答

0

好吧,我找到了解決辦法。這是一個兩步驟的解決方案。

所以,一開始我有:

option_!!NID!! [somme_text][5] some_text_option 5_option_some_text

首先,我使用這樣做對我的字符串替換紅寶石方法String.gsub:

str.gsub!(/\[(\d)\]|(\d_option)/) { |result| result.gsub(/\d/, '!!NID!!') }

在此之後我有:

option_!!NID!! [somme_text][!!NID!!] some_text_option !!NID!!_option_some_text

我現在可以使用JS在客戶端執行簡單的替換。

content.replace(/(!!NID!!)/g, 1)

瞧:)

我現在已經得到了預期的結果,避免JS的任何醜陋的線條。

我還在尋找一個更好的解決辦法,如果你知道一個:)

0

整個比賽被取代。這意味着你需要不同的處理情況:採用前瞻斷言的第二個

"option_!!NID!! [somme_text][5] some_text_option 5_option_some_text". 
    replace(/!!NID!!/g, "1"). 
    replace(/\d_option/g, "1_option"). 
    replace(/\[\d\]/g, "[1]") 

第一和第二種情況可以被組合:

"option_!!NID!! [somme_text][5] some_text_option 5_option_some_text". 
    replace(/!!NID!!|\d(?=_option)/g, "1"). 
    replace(/\[\d\]/g, "[1]") 
+0

你們這就是我試圖避免:對 –

+0

我找到了一個替代的解決方案:)謝謝反正。 –