看网上的正则,有一条没看懂

看网上的正则,有一条没看懂

/^(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])[a-zA-Z0-9]{8,31}$/

老师您好,这句话是什么意思呀。

?= 我记得课程上讲过是前瞻性匹配

正在回答

登陆购买课程后可参与讨论,去登陆

3回答

同学你好,(?=正则表达式)是前瞻匹配,实际匹配的是它所修饰的内容,而不是它本身,如下:

http://img1.sycdn.imooc.com//climg/5eb93111093933ec21020247.jpg

该例子中,匹配的是字符”java”,但并不是所有“java”都能被匹配,只有后面是“script”的“java”才能被匹配到。对应我们这个正则,需要匹配的是[0-9A-Za-z]{6,10},条件是三个括号中的内容。

具体含义如下:

三个括号:(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9]) 是条件,其中:(?=.*[A-Z])的意思是匹配的字符串需要包含”.*”和A-Z;(?=.*[a-z])意思是匹配的字符需要包含”.*”和a-z;(?=.*[0-9])意思是匹配的字符需要包含”.*”和0-9;而”.*”意思是除了换行符之外的所有字符0个到多个。

这三个括号都是修饰”[0-9A-Za-z]{6,10}”这句正则,最终匹配的也是这句正则,并且这句正则还需要满足三个括号中的条件。由于”[0-9A-Za-z]{6,10}”中限制了字符种类是数字、大写字母或者小写字母,所以三个条件中的”.*”中的*就只能是0次,所以第一个括号就变成了需要包含大写字母,第二个括号变成了需要包含小写字母,第三个括号变成了需要包含数字。


  • WittChen 提问者 #1
    谢谢老师耐心解答,看到“实际匹配的是它所修饰的内容,而不是它本身”,突然间恍然大悟
    2020-05-11 20:24:11
好帮手慕久久 2020-05-11 15:05:11

同学你好,该条正则的主体部分是:/^[a-zA-Z0-9]{8,31}$/,使用了首尾匹配,即首尾之间是8-31位字母和数字,不包含符号,非字母、非数字字符,所以条件中的“.*”就只能是0个“.”。

  • 提问者 WittChen #1
    ^(任意字符{0,}[A-Z]{1})(任意字符{0,}[a-z]{1}) (任意字符{0,}[0-9]{1})[a-zA-Z0-9]{8,31}$ 这段正则匹配最少字符应该是后面8个+前面3个应该是11-34个呀,我理解的肯定有错,所以才问,希望的是老师您一个括号一个括号的慢慢的解释,不然搞不懂啊,不知道哪里错了
    2020-05-11 15:13:53
  • 提问者 WittChen #2
    而且主题部分为什么是[a-zA-Z0-9]{8,31},那些前面的括号有什么用呀
    2020-05-11 15:15:40
  • 提问者 WittChen #3
    首部明明匹配的是(?=.*[A-Z]),怎么就省略了呢
    2020-05-11 15:16:32
好帮手慕久久 2020-05-11 14:00:19

同学你好,”?=“是 前瞻性匹配;该段正则的意思是匹配8-31位包含a-zA-Z0-9的字符,并且必须包含A-Z、a-z、0-9三种字符。如下:

http://img1.sycdn.imooc.com//climg/5eb8e9b9091964a015180116.jpg

如果我的回答帮到了你,欢迎采纳,祝学习愉快!

  • 提问者 WittChen #1
    .*不是通配符的意思吗,就是前面是什么都可以
    2020-05-11 14:08:12
  • 提问者 WittChen #2
    /^(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])[a-zA-Z0-9]{8,31}$/ “ . ”表示除了换行符都匹配,后面加了* 表示任意个可以是零个,那为什么是匹配8-31位包含a-zA-Z0-9的字符,并且必须包含A-Z、a-z、0-9三种字符,不明白呀
    2020-05-11 14:28:09
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
2.组件化网页开发
  • 参与学习           人
  • 提交作业       1121    份
  • 解答问题       14456    个

本阶段在运用JS实现动态网页开发的基础上,带你深入理解企业开发核心思想,完成一个企业级网页的开发,体验前端工程师的成就感。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师