Ruc*_*rma 6 javascript regex string
我是学习正则表达式的新手,并且遇到了这个答案,该答案使用正向前行验证密码。
正则表达式为- (/^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])[0-9a-zA-Z]{8,}$/)
用户提供的细分为-
(/^
(?=.*\d) //should contain at least one digit
(?=.*[a-z]) //should contain at least one lower case
(?=.*[A-Z]) //should contain at least one upper case
[a-zA-Z0-9]{8,} //should contain at least 8 from the mentioned characters
$/)
Run Code Online (Sandbox Code Playgroud)
但是,我不清楚将多个前瞻链接在一起。从我所学到的内容中,正面前瞻检查表达式是否跟随在前瞻中指定的内容。例如,这个答案说-
正则表达式
is(?= all)
与字母匹配is
,但前提是字母后紧跟字母all
那么,我的问题是个人前瞻如何工作?如果我把它分解-
^(?=.*\d)
。这是否表明在字符串的开头查找零个或多个出现的任何字符,后跟1位数字(从而检查1位数字的存在)?(?=.*[a-z])
,是否检查了字符串开头的第1步后,是否发现零个或多个出现的任何字符,后跟一个小写字母?还是两个前瞻完全不相关?( )
每个前瞻周围有什么用?是否创建捕获组?我也看过有关Rexegg的文章,但并没有太大帮助。
将不胜感激。
正如评论中提到的,这里的关键点不是向前查找,而是回溯:
(?=.*\d)
查找完整的行 ( .*
),然后回溯以找到至少一个数字 ( \d
)。
(/^
(?=\D*\d) // should contain at least one digit
(?=[^a-z]*[a-z]) // should contain at least one lower case
(?=[^A-Z]*[A-Z]) // should contain at least one upper case
[a-zA-Z0-9]{8,} // should contain at least 8 from the mentioned characters
$/)
Run Code Online (Sandbox Code Playgroud)
这里,应用了对比原理。
归档时间: |
|
查看次数: |
961 次 |
最近记录: |