2015-02-09 43 views
0

我正在研究創建不同的正則表達式,尋找強壯和中等強度的用戶密碼,並且我注意到相同的表達式給出了不同的結果(使用lookaheads,backrefrence和negative lookahead)如果我使用RegExp構造函數或文字語法。Javascript RegExp與構造函數和文字不同的結果

我已經在IE和Firefox的測試,並在這裏創造一個小例子:http://jsfiddle.net/4z4gxxkL/

我用的是RegExp構造是,我存儲在JSON我表達式爲字符串的原因 - 但在密碼的情況下,我可以使用字面語法。

我所有的其他表情都很簡單,併產生預期的結果。有人可以解釋這裏發生了什麼嗎?這是ECMAScript標準問題嗎?

我總是傾向於使用http://regexr.com/來測試我的正則表達式

我通過這給了false「ABC123」使用RegExp("^(?=.*\d)(?=.*[a-zA-Z])(?!.*(.)\1).{5,}$", "g")預成型的測試發現這種差異,但是測試使用/^(?=.*\d)(?=.*[a-zA-Z])(?!.*(.)\1).{5,}$/gtrue

+2

發表您的正則表達式,並在此輸入。 – 2015-02-09 14:37:35

+0

有關這裏發生了什麼的深入討論,請參閱我對一個非常類似的問題的回答:[從JS變量構建正則表達式不起作用](http://stackoverflow.com/a/6803651/433790) – ridgerunner 2015-02-09 15:00:29

回答

2

在創建的正則表達式從RegExp構造函數實例中,您需要轉義\與另一個\因爲它是一個轉義序列。

第一個作品的權利,因爲在String沒有\,而在其他國家,它的存在,轉義

Escaped Version

+0

當然!我多麼愚蠢! – 2015-02-09 14:51:59

+0

@ LukeTO'Brien發生:-) – 2015-02-09 14:52:29

相關問題