2016-02-21 21 views
2

我有以下字符串:匹配下劃線後面跟着一個數字的第一次出現在HTML更換匹配的集

foo_0_13 
foz[0][bar][] 
far_0 

我有一個慣例,並需要從字符串匹配諸如foo_0_13far_2下劃線和數字以下,例如_0_2 ...以及與結構foz[0][bar][]foz[3]任何字符串我需要匹配[0][3]

我已經試過((\_\d)|\[\d\])但這匹配_0_1,我怎麼才能讓它匹配_0

我只需要找到第一個出現的「下劃線數字」組合。

第二部分:

如果我有與_0多發生[0]一個html劃分爲

<div id="foo_0_13" name="bar[0][xxx][]"> <p id="par_0">Test</p> </div>

,我需要用_1替換所有這些發生,使得html變成

<div id="foo_1_13" name="bar[1][xxx][]"> <p id="par_1">Test</p> </div>

我該如何詳細說明這一點,以獲得所需的HTML知道我正在使用JavaScript?

回答

2

你可以試試下面的正則表達式替換。

var res = str.replace(/("[a-z]+[_[])\d+/g, '$01' + '1'); // 1 = new digit 

See regex demo at regex101js fiddle

在我以前'$01' + '1'只是爲了visualy反向引用組1從新添加數字分開更換。取而代之的是$11$011,最後的to be preferred

1

從字符串的開頭開始。在非捕獲組中匹配所有內容,直到遇到任何匹配的模式。

(?:^.*?)(_\d|\[\d\]) 

演示和擊穿:https://regex101.com/r/cT6qX2/1

+0

@KAD請問一個新的問題,如果你有一個新的問題 – timgeb

0

如果使用的是牽引組可以隔離可能的第二下劃線和數字組外的實現。

不知道正則表達式的實現或語言,很難給出完美的答案。

例子:

(_\d)_*|(\[\d\]) 
+0

這看起來不錯,但我必須捕獲2組而不是1,我認爲@timgeb的方法更好。至於語言,我正在使用javascript – KAD

+0

我也喜歡@timgeb的方法,但請注意它是一個捕獲組,這兩者的某些組合似乎是按順序排列的 –

相關問題