js正则先行断言,
Posted manu-yyj
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js正则先行断言,相关的知识,希望对你有一定的参考价值。
引子,之前学的正则大多都是比较死板的一个扣一个,有时候遇到难点的又是网上抄袭,很费事,费力。晚上无聊学习下正则。
首先看个例子,匹配一个密码,但是必须有字母和数字,这是网上一个比较常见的案列;
/^(?=.*[0-9])(?=.*[a-z])[0-9A-Za-z]6,12$/
- 首先看?=这个代表什么,(?=exp)也叫零宽度正预测先行断言,它断言自身出现的位置的后面能匹配表达式exp。比如\\b\\w+(?=ing\\b),匹配以ing结尾的单词的前面部分(除了ing以外的部分),如查找I‘m singing while you‘re dancing.时,它会匹配sing和danc。这里引自《正则30分钟入门那篇课程》,http://deerchao.net/tutorials/regex/regex.htm#more;
- 也就是说?=表示,他断言他出现的位置能匹配后面的表达式,说直白一点,就是他这里做了限制,后面的的表达式必须符合标注。那这里做了什么限制了?
- 这个地方有点难以理解,对我来说。看个人吧。他不能匹配到字符,他是匹配了为位置,记住位置,$^这些都是在匹配位置;
- 完整的来讲,我在开头^紧跟着的位置,也可以理解就在开头,我发话了,后面的表达式,都配合下我演出 内容是 .*[0-9]我匹配任意字符,但是后面你们一定要给我来个数字必须有
-
都说了必须有数字嘛,有了就行了。但是这个范围其实很大,离你匹配的东西差距很远,所以大规则下还有小规则;
- [0-9A-Za-z]6,12$这是小规则,在满足大规则的前提下,我还具体约束一下。老大说了任意字符都匹配有字母和数字就行,但是我这里必须匹配字母数字,还有个数要求。这是具体匹配。来看个例子,
老大说了,要满足他的条件,我想在后面加个.com看看行不行,形如这种格式
-
这样是不行的老大匹配的是位置,满足条件。你这是具体的东西啊,这里一定要理清位置,和具体字符的关系。.com是实际要匹配的。那怎样才行了?
- 我现在写的表达式满足老大的意思了吧,
-
这样就行了,前面的断言要满足,后面匹配实际的字符也要满足,一旦有冲突,就会匹配不了。
以上是关于js正则先行断言,的主要内容,如果未能解决你的问题,请参考以下文章