javascript 正则表达式 的 x(?=y) 和x(?!y)
大家讲道理
大家讲道理 2017-04-10 14:44:55
0
2
1387

其实我是懂的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的右边位置。

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

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

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!