javascript 正则表达式 的 x(?=y) 和x(?!y)
大家讲道理
大家讲道理 2017-04-10 14:44:55
[JavaScript讨论组]

其实我是懂的x(?=y)x(?!y)的用法,但是我实在看不懂下面这两个正则表达式的工作原理
密码匹配 大小写字母和数字
^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?!.*\s).*$
密码匹配 大小写字母 特殊字符和数字 最小长度8位
(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$
原网址在这里 http://html5pattern.com/Passwords

额是这样的.看不懂的原因有两个.
1. 在模式x(?=y)x(?!=y)里,为啥缺少了x还能匹配?
2. 连续几个(?=y) 合在一起写如何理解?

大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

全部回复(2)
巴扎黑

x(?=y)x(?!=y)缺少了x是不能匹配的,如果你所理解的(我不知道你怎么理解的),但是你为啥怀疑这点来了呢,测试一下便知。

var re = /x(?=y)/;
console.log(re.test('yy'));
console.log(re.test('xy'));

(?=.*\d)(?=.*[a-z])(?=.*[A-Z])可以看成三组正向环视,三组连在一起(顺序不重要)都是在匹配右边的位置,如果是x(?=y)这种形式的话,我们说如果x匹配到了,正则表达式继续向右匹配(如果引擎是这样传送要被匹配的字符的,暂不论DFA和NFA了),但是(?=y)只是查看右边是不是有y,如果再来一组(?=z)其实也是在考察x的右边位置。

PHP中文网
  1. (?=y)匹配的是一个位置(即后面有y的位置),跟有没有x没有关系
  2. 多个零宽断言放在一起表示这个位置必须同时满足多个条件

第一个正则表达式表示必须含有一个数字,一个小写字母,一个大写字母并且不能含有空白字符
第二个同理

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号