簡體   English   中英

JS / Ruby:使用正則表達式進行部分替換

[英]JS / Ruby : partial replacement using regexp

我正在嘗試使用單個正則表達式替換html代碼的不同部分。

例如,我有這段文字:

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

但我有 :

option_1 [somme_text]1 some_text_option 1_some_text

有人可以告訴我如何使用一個正則表達式嗎? 因為我不明白為什么替換不只是替換括號之間的目標。

謝謝 :)

PS:我使用Ror,因此也可以使用ruby和JS解決方案。

整個比賽被替換。 這意味着您需要以不同的方式處理案件:

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

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

因此,一開始我有:

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

首先,我使用ruby方法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的任何丑陋行的預期結果。

如果您知道一個,我仍在尋找更好的解決方案:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM