2013-03-19 37 views
3

我有這樣的正則表達式:正則表達式沒有按預期工作?

new RegExp("^[a-z 0-9\"\-\`]+$", "ig") 

和我測試未想工作的字符串:'#vc'

但它通過測試:(和它不應該(#))

new RegExp("^[a-z 0-9\"\-\`]+$", "ig").test('#vc') //true 

但如果我刪除或者\"\-\`,它的工作(和測試失敗,因爲它應該)。

我在做什麼錯?

我的正則表達式只搜索英文,數字,空間,[「],[ - ] [和[`]

回答

5

如果使用RegExp構造函數,你需要翻倍的逃逸,因爲有逃逸的2層:擺脫在JavaScript字符串字面量和正則表達式語法逃逸

然而,在你的情況下,也可以寫一個正則表達式,而不逃避所有

在你的情況,你可以。使用文字RegExp,在你只需要關心轉義正則表達式語法,並出現在正則表達式的任何/逃逸(因爲/作爲分隔符文字RegExp

/^[a-z 0-9"\-`]+$/gi 

另一種方法是:

/^[a-z 0-9"`-]+$/gi 

如果它是字符類中的最後一個,則不需要跳過破折號-。這樣,你不需要把所有的逃跑都弄糊塗了。

或者,如果你仍然想使用RegExp構造函數,你需要加倍逃避字符串中指定\

new RegExp('^[a-z 0-9"\\-`]+$', "ig") 

或者只是使用其中最後一個指定的字符類-其他版本:

new RegExp('^[a-z 0-9"`-]+$', "ig") 

注意,我改變字符串引自"',以避免在字符串中逃脫"。如果由於某種原因喜歡",逃避"在文字串級:

new RegExp("^[a-z 0-9\"`-]+$", "ig") 

至於當前的正則表達式

new RegExp("^[a-z 0-9\"\-\`]+$", "ig") 

相當於

/^[a-z 0-9"-`]+$/gi 

作爲你可以看到一個的字符範圍包含到`包含,這意味着包含所有帶有從0x22到0x60的ASCII碼的字符,並且#恰好在該範圍內。

要檢查模式是否是你想要的,你總是可以調用source屬性的正則表達式來獲得正則表達式的源字符串。

+0

我不能相信我失敗的那個...:-0 – 2013-03-19 10:20:59

+0

但看看這裏http://i.stack.imgur.com/guafm.jpg它fu **一切(在視覺工作室) – 2013-03-19 10:25:45

+0

所以實際上\「將會是\\」...... grrrrrr – 2013-03-19 10:34:04

相關問題