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

. Зачем положительному взгляду нужно другое выражение перед ним? – 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

Спасибо большое! Это очень понятно и весьма полезно. –