美文网首页
正则的正向预查和负向预查

正则的正向预查和负向预查

作者: 看庭前花开花落_望天上云卷云舒 | 来源:发表于2020-01-16 14:34 被阅读0次
一、(?=pattern)正向预查 :

所谓正向预查就是 ,在任何匹配 pattern 的字符串开始处匹配查找字符串, 要匹配的字符必须满足 pattern 这个条件!
举例:正则表达式/javascript/ 会匹配 javascript。同样也会匹配 javascript2中的 javascript,但如果我们只想匹配 javascript3中的 javascript。我们可以用正向预查:/javascript(?=3)/。

var reg=/javascript(?=3)/;
var str='javascript2';
console.log(reg.exec(str));//null

var reg=/javascript(?=3)/; //javascript 的后面必须是是3
var str='javascript3';
console.log(reg.exec(str));//["javascript", index: 0, input: "javascript3", groups: undefined]

注意:括号里的内容只是条件,并不参与真正的捕获,只是检查后面的字符是否符合要求而已,例如上边的正则返回来 的是javascript ,而不是javascript3

二、(?!pattern) 负向预查

形式 (?!pattern) 和 (?=pattern) 正好相反,要求做匹配的时候,必须不满足pattern这个条件

var reg=/javascript(?!js)/;
var str='javascriptjs';
reg.exec(str);//null  因为正则要求 javascript 后面不能是js

var reg=/javascript(?!js)/;
var str='javascripttest';
reg.exec(str);//["javascript", index: 0, input: "javascripttest", groups: undefined]

看看下面这个正则,你能理解reg1和reg2两个正则表达了相同的意思吗?

var reg2=/(?=^)\d{2}(?=$)/;
var reg2=/^\d{2}$/
三、实战练习:

1、编写一条正则用来验证此规则:一个6-16位的字符串,必须同时包含大小写字母和数字。

let reg=/(?!^[a-zA-Z]+$)(?!^[0-9]+$)(?!^[a-z0-9]+$)(?!^[A-Z0-9]+$)^[a-zA-Z0-9]{6,16}$/;
reg.test('123456');//false
reg.test('123aaa');//false
reg.test('123AAA');//false
reg.test('123aaA');//true
//代码解析:
//先把正常的写好了:^[a-zA-Z0-9]{6,16}$
//在用负向预查 来规定不能是啥,并且写在正常合规代码的前边
// 不能只是大写字母 或者小写字母 或者大小写字母的混合 (?!^[a-zA-Z]+$) 
//不能只是数字 (?!^[0-9]+$)
//不能只是数字和小写字母 (?!^[a-z0-9]+$)
//不能只是数字和大写字母 (?!^[A-Z0-9]+$)
//判断完以上的不能是什么 那么只能是 ^[a-zA-Z0-9]{6,16}$ 这个了

2、// 1-10位:数字、字母、下划线组成字符串,必须有_

let reg=/(?!^[a-zA-Z0-9]+$)^\w{1,10}$/
reg.test('a');//false
reg.test('aC9');//false
reg.test('aC9_');//true

//代码解析:\w 是数字、字母、下划线
//先把正常的写好了:^\w{1,10}
//必须有_,也就是不能只是包含数字和字母  (?!^[a-zA-Z0-9]+$)

3、字符串中包含 "\w",但是必须包含_

let reg=/(?=_)\w+/

注:笔记源于珠峰培训

相关文章

  • 正则的正向预查和负向预查

    一、(?=pattern)正向预查 : 所谓正向预查就是 ,在任何匹配 pattern 的字符串开始处匹配查找字符...

  • 利用正则表达式把100000000转换成100.000.000

    首先,我们得用到正向预查,代码大致如下: 简单解释下,如果解释的不好,不要介意。首先那个?=就是正向预查里面的内容...

  • 6. 正向预查、贪婪与非贪婪

    正向预查 x(?=y) 匹配x后跟着y的字符串,这种向后匹配的方式叫做正向预查。 贪婪模式&非贪婪模式 贪婪模式应...

  • javascript正则表达式-----正向预查

    前几篇有用到过, 但是未做深入学习,发现一篇很好的博文转载自 javascript--正向预查 什么是正向预查?这...

  • 零宽断言

    今天我们来讲一下正则 零宽断言还有其他的名称,例如"环视"或者"预搜索","预查" 等等 作用: 作用是给指定位置...

  • 正则表达式之 "正向否定预查"

    这篇文章写的不够透彻.. 需要重新写一下. 记录一些比较有技巧性的用法 正向否定/肯定预查 匹配以/wiki/开头...

  • 预查注意事项

    如果是逆序,字符长度需要确定, 如果是顺序,则长度不限制,这个长度我理解为表达式反应出来的长度

  • php正则 非捕获元 "?:" "

    其中?:是非捕获元之一,还有两个非捕获元是?=和?! 这两个还有更多的含义,前者为正向预查,在任何开始匹配圆括号内...

  • 待加强--持续更新

    1.枚举enum(优先2)2.正则(优先1)3.过数据库自带工具,比如时间戳,计算,拼接,预查(FIND_IN_S...

  • 27,正则表达式3-速查

    正向预搜索 "(?=xxxxx)","(?!xxxxx)"反向预搜索 "(?<=xxxxx)","(?

网友评论

      本文标题:正则的正向预查和负向预查

      本文链接:https://www.haomeiwen.com/subject/ktyfzctx.html