2011-10-28 85 views

回答

4

更新:根據評論中給出的建議進行更新。

改爲使用這三個表達式中的一個。這是相同的正則表達式,只需修復(?i)部分並添加所需的轉義以匹配Javascript規範。

var regex = new RegExp("^(?![\\. -])(?!.*[\\. -]$)[\\w!$%'*+/=?^`{|\\.}~ -]{1,64}$", "i"); 
var regex = new RegExp('^(?![\\. -])(?!.*[\\. -]$)[\\w!$%\'*+/=?^`{|\\.}~ -]{1,64}$', "i"); 
var regex = /^(?![\. -])(?!.*[\. -]$)[\w!$%'*+/=?^`{|\.}~ -]{1,64}$/i; 

如果使用new RegExp來構建你的正則表達式的對象,那麼你必須逃避所有的反斜線。第一個和第二個表達式的不同之處在於第二個表達式使用單引號構造正則表達式字符串,並且作爲正則表達式的一部分存在單引號,因此您必須轉義單引號以使其正常工作。第三個表達式使用/pattern/flags語法構造正則表達式對象。正如Mike在評論中指出的那樣,如果不在字符集內,則必須轉義/。你所有的/都是在字符集內,所以不需要轉義。

簽出更多的JavaScript的正則表達式語法這裏https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/RegExp

+2

非轉義正斜槓不是Darthg8r一個問題:像'新的RegExp(「A/B」)'是完全有效的。 '/ a/b /'不會有效,但如果他正在這樣做,Darthg8r將不會進入「無效組」錯誤消息。 – ruakh

+0

但是,+1,因爲你的代碼會起作用。 :-) – ruakh

+0

當然。我只是想確保OP知道這一點。如果他使用「新的RegExp」,那麼他必須轉義符號。我不確定OP使用他的正則表達式的上下文。 –

3
(?i) 

JavaScript不支持正則表達式中模式修飾符。