js正则先行断言,

Posted manu-yyj

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js正则先行断言,相关的知识,希望对你有一定的参考价值。

引子,之前学的正则大多都是比较死板的一个扣一个,有时候遇到难点的又是网上抄袭,很费事,费力。晚上无聊学习下正则。

首先看个例子,匹配一个密码,但是必须有字母和数字,这是网上一个比较常见的案列;

/^(?=.*[0-9])(?=.*[a-z])[0-9A-Za-z]6,12$/
  1. 首先看?=这个代表什么,(?=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
  2. 也就是说?=表示,他断言他出现的位置能匹配后面的表达式,说直白一点,就是他这里做了限制,后面的的表达式必须符合标注。那这里做了什么限制了?
  3. 这个地方有点难以理解,对我来说。看个人吧。他不能匹配到字符,他是匹配了为位置,记住位置,$^这些都是在匹配位置;
  4. 完整的来讲,我在开头^紧跟着的位置,也可以理解就在开头,我发话了,后面的表达式,都配合下我演出 内容是  .*[0-9]我匹配任意字符,但是后面你们一定要给我来个数字必须有技术图片
  5. 技术图片
  6. 都说了必须有数字嘛,有了就行了。但是这个范围其实很大,离你匹配的东西差距很远,所以大规则下还有小规则;

  7. [0-9A-Za-z]6,12$这是小规则,在满足大规则的前提下,我还具体约束一下。老大说了任意字符都匹配有字母和数字就行,但是我这里必须匹配字母数字,还有个数要求。这是具体匹配。来看个例子,技术图片

    老大说了,要满足他的条件,我想在后面加个.com看看行不行,形如这种格式

  8. 技术图片

    这样是不行的老大匹配的是位置,满足条件。你这是具体的东西啊,这里一定要理清位置,和具体字符的关系。.com是实际要匹配的。那怎样才行了?

  9. 技术图片
  10. 我现在写的表达式满足老大的意思了吧,
  11. 技术图片
  12.  这样就行了,前面的断言要满足,后面匹配实际的字符也要满足,一旦有冲突,就会匹配不了。

以上是关于js正则先行断言,的主要内容,如果未能解决你的问题,请参考以下文章

js-正则表达式ES6--正则的扩展

正则表达式的先行断言(lookahead)和后行断言(lookbehind)

js正则

JS 正则中环视(断言)应用 -- 数字千分符

正则断言详解

正则表达式-零宽断言