2012-05-01 13 views
52

出於某種原因,這兩個正則表達式的行爲方式相同:在正則表達式範圍逃生點

"43\\gf..--.65".replace(/[^\d.-]/g, "");​ // 43..--.65 
"43\\gf..--.65".replace(/[^\d\.-]/g, "");​ // 43..--.65 

Demo

在第一個正則表達式,我不逃避點(.),而在第二我做的正則表達式(\.)。

有什麼區別,爲什麼他們的行爲相同?

回答

45

因爲點在字符類內(方括號[])。

http://www.regular-expressions.info/reference.html看看,它說(根據焦炭類部分):

任何字符,除了^ - ] \該字符添加到該字符類可能的匹配 。

+4

和減號('-')只有在範圍中間時才需要轉義? – gdoron

+0

因爲它對我來說工作得很好(不管我把它放在哪裏都行得通。?) – gdoron

+0

如果你想匹配連字符,在打開方括號後立即添加它,例如: [-A-Z]。否則,連字符指定範圍。它適用於你的情況,可能只是因爲你沒有在正則表達式中指定範圍,但我建議你按照參考,以防你將在稍後添加範圍。 – usoban

78

點運算符.不需要在字符類[]內部轉義。

+17

感謝您的明確答覆。另一個答案太混亂了。 – PolishHurricane

4

this web page,我看到:

「記住,點是不是一個字符類中的元字符,所以我們並不需要用反斜槓逃脫它。」

所以如果你使用JavaScript來測試你的正則表達式我想它的逃逸是不必要的...

17

,嘗試\\.而不是\.

它的行爲方式相同,因爲JS刪除了第一個反斜槓。

+5

你讀過已經給出的答案嗎? – gdoron