正则表达式预查的详细解释与应用实例

目录
  • 解释
  • 应用
  • 难点-为什么.?[^#/n]?.*?不行
  • 总结

解释

预查又称环视(Lookaround)、属于零宽断言(Zero-Length Assertions)的一种,有 4 个语法:

语法 中文名 英文名
(?=regex) 肯定性前瞻 Positive lookahead
(?!regex) 否定性前瞻 Negative lookahead
(?<=regex) 肯定性后顾 Positive lookbehind
(?<!regex) 否定性后顾 Negative lookbehind

比较通俗的解释:

  • 肯定性:匹配 regex
  • 否定性:不匹配 regex
  • 前瞻:向前(右、正向)看(预查)
  • 后顾:向后(左、反向)看(预查)
  • 肯定性前瞻:先看看前方(右边)是否匹配 regex,但不向前走
  • 否定性前瞻:先看看前方(右边)是否不匹配 regex,但不向前走
  • 肯定性后顾:回头看后方(左边)是否匹配 regex
  • 否定性后顾:回头看后方(左边)是否不匹配 regex

为什么右边是正向、前向,左边是反向、后向?

因为正则是从左往右匹配的,就像一个人在走,那么向前看(前瞻)就是右边、正向,向后看(后顾)就是左边、反向,特别注意不要和前缀后缀搞混

应用

1、判断是否同时包含但不限于大写字母、小写字母和数字,且不能包含 114514,长度为 8~32 个字符

/^(?=.*[A-Z])(?=.*[a-z])(?=.*\d)(?!.*114514).{8,32}$/.test('10086@qq.COM')
// true

2、判断不以 8082848688 开头

/^(?!8[02468])\d+$/.test('81789110')
// true

3、匹配由空白分割的字符串中的纯数字串

'123 abc   1st\r\n4   1970\'s 56 @10086 789'.match(/(?<!\S)\d+(?!\S)/g)
// ['123', '4', '56', '789']
'123 abc   1st\r\n4   1970\'s 56 @10086 789'.match(/(?<=^|\s)\d+(?=\s|$)/g)
// ['123', '4', '56', '789']

4、仅删除夹在数字中的逗号

'And then, I have 1,003,334, you have 996,6,6,6'.replace(/(?<=\d),(?=\d)/g, '')
// 'And then, I have 1003334, you have 996666'

5、在数字中添加分组逗号

'And then, I have 1003334, you have 996666'.replace(/(?<=\d)(?=(?:\d{3})+(?!\d))/g, ',')
// 'And then, I have 1,003,334, you have 996,666'

6、判断是否仅包含字母,但不包含小写元音字母

/^(?:(?![aeiou])[A-Za-z])+$/g.test('src')
// true
/^(?=[A-Za-z]+$)[^aeiou]+$/g.test('src')
// true

7、判断是否是字母或数字或字母+数字,不能为空

/^(?=.)[a-z]*\d*$/i.test('Add1')
// true

8、匹配长度为 11 的号码,注意不能是其他号码的子串

`name:123456789
id:11012345678910
tel:12345678910
name:abc11111111111
id:888888888888
tel:11966`.match(/(?<!\d)\d{11}(?!\d)/g)
// ['12345678910', '11111111111']

9、如果缺少协议前缀,则添加 http://,忽略空行

String.raw`segmentfault.com
//bing.com
\baidu.com

127.0.0.1
ftp://127.0.0.1

https://google.com

`.replace(/^(?![a-z]+:)[\\/]*(?=.)/gim, 'http://')
/*
http://segmentfault.com
http://bing.com
http://baidu.com

http://127.0.0.1
ftp://127.0.0.1

https://google.com

*/

难点-为什么.?[^#/n]?.*?不行

  • .?[^#/n]?.*?<VirtualHost
  • .?[^#/n]?相当于无,最后的.*?又匹配上了#号
  • (?<!.?#.?)来说就是一个整体,所有满足要求

总结

到此这篇关于正则表达式预查的详细解释与应用的文章就介绍到这了,更多相关正则表达式预查内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 正则表达式中的正向预查和负向预查

    日常工作当中,大多数IDE自带的查找工作都能满足大多数需要. 加上正则匹配简直如虎添翼.匹配个邮箱,电话号什么的不在话下.有时候我们可能会遇到稍微特殊的场景. Windows 1.03 and Windows 2.0 fisrt Released in 1985 and 1987 respectively. Windows 95 and Windows 98 are the successor. Then Windows 2000 and Windows Xp Windows appeared.

  • 正则表达式中的正向预查和负向预查实例分析

    本文实例讲述了正则表达式中的正向预查和负向预查.分享给大家供大家参考.具体分析如下: 这里先来看一个例子,再来解释什么是正向预查. 例子:有一段内容为"coming soon,going gogogo",要求把com和go查找出来.代码如下: 复制代码 代码如下: <html> <head> <script type="text/javascript"> //正向预查 function t1(){  var con = docum

  • 浅析正则表达式中的lastIndex以及预查

    依次写出下列输出内容. var reg1 = /a/; var reg2 = /a/g; console.log(reg1.test('abcabc')); // true console.log(reg1.test('abcabc')); // true console.log(reg1.test('abcabc')); // true console.log(reg1.test('abcabc')); // true console.log(reg2.test('abcabc')); //

  • 正则表达式预查的详细解释与应用实例

    目录 解释 应用 难点-为什么.?[^#/n]?.*?不行 总结 解释 预查又称环视(Lookaround).属于零宽断言(Zero-Length Assertions)的一种,有 4 个语法: 语法 中文名 英文名 (?=regex) 肯定性前瞻 Positive lookahead (?!regex) 否定性前瞻 Negative lookahead (?<=regex) 肯定性后顾 Positive lookbehind (?<!regex) 否定性后顾 Negative lookbeh

  • Python正则表达式保姆式教学详细教程

    目录 一.re模块 1.导入re模块 2.findall()的语法: 二.正则表达式 1.普通字符 2.元字符 (二)正则的使用 1.编译正则 2.正则对象的使用方法 3.Match object 的操作方法 4.re模块的函数 正则作为处理字符串的一个实用工具,在Python中经常会用到,比如爬虫爬取数据时常用正则来检索字符串等等.正则表达式已经内嵌在Python中,通过导入re模块就可以使用,作为刚学Python的新手大多数都听说"正则"这个术语. 今天来给大家分享一份关于比较详细

  • linux下的tar命令详细解释

    tar命令 [root@Linux ~]# tar [-cxtzjvfpPN] 文件与目录 .... 参数: -c :建立一个压缩文件的参数指令(create 的意思): -x :解开一个压缩文件的参数指令! -t :查看 tarfile 里面的文件! 特别注意,在参数的下达中, c/x/t 仅能存在一个!不可同时存在! 因为不可能同时压缩与解压缩. -z :是否同时具有 gzip 的属性?亦即是否需要用 gzip 压缩? -j :是否同时具有 bzip2 的属性?亦即是否需要用 bzip2 压

  • cmd 环境变量设置方法详细解释

    cmd设置环境变量可以方便我们bat脚本的运行,但是要注意的是变量只在当前的cmd窗口有作用(局部生效),如果想要设置持久的环境变量需要我们通过两种手段进行设置:一种是直接修改注册表,另一种是通过我的电脑-〉属性-〉高级,来设置系统的环境变量. 1.查看当前所有可用的环境变量:输入 set 即可查看. 2.查看某个环境变量:输入 "set 变量名"即可,比如想查看temp变量的值,即输入 set temp 当然也可以使用echo %temp% 3.修改环境变量 :输入 "se

  • 易语言运算命令的详细解释

    本篇内容针对易语言运算命令的位取反.位于.位或.位异或做了详细解释 易语言3.5版提供了4个位运算命令. 1.位取反 位取反命令将指定数值转换为二进制后,对每一比特位的值取反,即0变为1,1变为0,然后转换成十进制数,返回值是转换后的十进制数. "位取反"命令的命令格式是: 〈整数型〉 位取反 (欲取反的数值) 参数"欲取反的数值"的类型为"整数型". 2.位与 位与命令将所给的数值全部转换为二进制,对所有二进制数值的共同比特位进行"与

  • PHP正则之正向预查与反向预查讲解与实例

    了解正向预查&反向预查前,我们先要知道正则的2个函数:preg_match_all . preg_replace 正向预查&反向预查 正向或反向预查都是非获取匹配,不进行存储供以后使用. 1.正向预查 (?:pattern) 匹配结果 (?=pattern) 正向匹配 (?!pattern) 正向不匹配 2.反向预查 (?<=pattern) 反向匹配. (?<!pattern) 反向不匹配. 什么叫非获取匹配(非捕获匹配),请看例子 一:PHP正则正向预查实例 PHP获取匹配

  • Python实现随机游走的详细解释

    1.单一的500步随机游走的例子,从0开始,步长为1和-1,且以相等的概率出现. 注:需要python的内置函数random,不需安装,直接导入即可 import random -*- coding: utf-8 -*- import matplotlib.pyplot as plt import random position=0#设置初始位置 walk=[]#保存位置 steps=500#设置步数为500步 for i in range(steps): step=1 if random.ra

随机推荐