2015-04-29 84 views
0

我想用0.digit替換.digit的所有出現。看後面全部替換

我是新來的正則表達式,但據我瞭解,我可以用後面看這樣做。但JS不支持,我想知道是否有人知道一個解決方案。 爲了顯示我寫下面的代碼的問題。

str = "0.11blabla.22bla0.33bla.33" 
allow = "\\.\\d*" 
str.match(new RegExp(allow,"g")) 
[".11", ".22", ".33", ".33"] 
deny = "0\\.\\d*" 
str.match(new RegExp(deny,"g")) 
["0.11", "0.33"] 
diffreg= new RegExp("(?!"+deny+")"+allow,"g") // translates to: /(?!0\.\d*)\.\d*/g 
str.match(diffreg) 
[".11", ".22", ".33", ".33"] 

顯然允許匹配所有十進制值,而拒絕匹配的所有值與前面的0的結果當然應兩者之間的差集:[「0.33" ,」 0.33" ]。

+0

您想從'intersectionreg'中獲得期望的輸出嗎? –

+0

爲什麼不使用分組匹配'str.match(/([^ 0])(\。\ d)/ g);'? –

+1

你確定你的意思是「十字路口」嗎?我懷疑你想要設置差異:所有那些在設置「允許」,而不是在設置「拒絕」(交叉口是那些在兩個集合)。 – Richard

回答

0

我認爲你正在尋找這個表達式,而不是

[0]?(\.\d*) 

因此,在你的代碼,你將有:

intersectionreg = new RegExp("[0]?("+allow+")","g") 

感謝@richard,編輯

+0

不幸的是,它不匹配字符串開頭的「.1」。 – Richard

+0

看起來我誤解了這個問題。感謝您的注意。 –

+0

這樣做的竅門,但我有另一個錯誤,因爲我不知道「*」也匹配0我需要使用「+」的事件。最終的正則表達式是: str.replace(/ [0]?(\。\ d +)/ g,「0 $ 1」) – flatbeat

1

使用group match

> str.replace(/([^0])(\.\d)/g, "$10$2"); 
"0.11blabla0.22bla0.33bla0.33"