2017-02-23 46 views
0

這是我很困惑的javascript正則表達式。我知道(?=)是積極的向前看,但是在那之前是否有一個主要表達?有人可以告訴我這個正則表達式如何匹配任何東西?

/^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])\w{8,}$/ 

回答說,它相匹配的密碼是:

至少 一個數字,一個小寫字母和一個大寫字母和至少8個字符 是字母,數字或下劃線

但我不明白爲什麼。有人可以解釋一下嗎?

+0

你需要閱讀有關正則表達式,現在d是數字,[az]是小寫字母,[AZ]是大寫字母,w是字。它需要你大約半個小時如果你願意花時間去理解正則表達式的基礎知識。 –

+1

請閱讀[this](https://regex101.com/r/bRdYk9/1)以獲得該正則表達式的全面解釋...記住您在其他正則表達式中遇到的謎題 –

+0

爲什麼正面lookahead需要另一個表情之前呢? – JJJ

回答

2

讓我們來分析一下:

/^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])\w{8,}$/ 

^      // Match the start of the string 
(?=.*\d)    // Make sure the string contains at least one digit 
(?=.*[a-z])   // Make sure the string contains at least one lowercase letter 
(?=.*[A-Z])   // Make sure the string contains at least one uppercase letter 
\w{8,}    // Match at least eight word characters (alphanumeric or underscore) 
$      // Match the end of the string 

(?=.*PATTERN)是確保一個匹配的字符串包含PATTERN的常用方法。

它的工作原理是.*匹配任何內容(除了換行符); lookahead的字面意思是「這個正則表達式只應該匹配,如果你發現後發現PATTERN」。

+0

非常感謝!這非常明確,非常有幫助。 –

相關問題