
lynn1286
2022/10/06阅读:31主题:默认主题
正则表达式进阶
欢迎来到正则表达式进阶教程,话不多说,上车!!! 分组 () 在正则表达式中还提供了一种将表达式分组的机制,当使用分组时,除了获得整个匹配;还能够在匹配中选择每一个分组。 要实现分组很简单,使用()即可。 例如:
这段正则表达式将文本分成了两组: ● 第一组为:020, ● 第二组为89098989。 分组有一个非常重要的功能——捕获数据。所以()被称为捕获分组,用来捕获数据,当我们想要从匹配好的数据中提取关键数据的时候可以使用分组。 (\d{3}) 和 (\d{8})就分别捕获了两段数据: ● 020 ● 89098989 或者条件 | 使用分组的同时还可以使用 或者(or)条件。 例如要提取所有图片文件的后缀名,可以在各个后缀名之间加上一个 | 符号:
非捕获分组 (?:表达式) 有时候,我们并不需要捕获某个分组的内容,但是又想使用分组的特性。 这个时候就可以使用非捕获组(?:表达式),从而不捕获数据,还能使用分组的功能。 例如想要匹配两个字母组成的单词或者四个字母组成的单词就可以使用非捕获分组:
分组的回溯引用 () \1 先看例子:
我们经常需要使用正则去匹配html字符串,这种正则看上去还不错,但是,如果html的文本改成了这个样子:
啊哦~ 很明显,这种结果是错误的,这时候我们就需要使用分组回溯引用来解决这个问题了。
\1 表示的是第一个分组 , 如果你有多个分组 , 使用\N可以引用编号为N的分组。例如:
正向先行断言 (?=表达式) 很多人也称先行断言和后行断言为环视,也有人叫预搜索. 先行断言和后行断言总共有四种:
-
正向先行断言 -
反向先行断言 -
正向后行断言 -
反向后行断言 正向先行断言:(?=表达式),指在某个位置向右看,表示所在位置右侧必须能匹配表达式。 例如:
如果要取出读书两个字,要求这个读书后面有超强,这个时候就要这么写:读书(?=超强),这就是正向先行断言。
练习题: 密码强度验证: 规则如下: ● 至少一个大写字母 ● 至少一个小写字母 ● 至少一个数字 ● 至少8个字符
反向先行断言 (?!表达式) 反向先行断言(?!表达式)的作用是保证右边不能出现某字符。
正向后行断言 (?<=表达式) 先行断言和后行断言只有一个区别,即先行断言从左往右看,后行断言从右往左看。 正向后行断言:(?<=表达式),指在某个位置向左看,表示所在位置左侧必须能匹配表达式
上述表达式要求读书的前后必须符合才匹配。 注意: 这个表达式并不是所有的浏览器都支持。 反向后行断言 (?<!表达式) 反向后行断言:(?<!表达式),指在某个位置向左看,表示所在位置左侧不能匹配表达式
上述表达式要求读书前面没有我 后面咩有超强。 注意: 这个表达式并不是所有的浏览器都支持。
作者介绍
