正则表达式入门

2020-09-21 16:19:25 浏览数 (1)

有些知识,我们只需要付出一点点时间,把它掌握了,会大大提高我们的效率,节省我们的时间。正则表达式就是这样的知识,但是,作为入行好几年的我来说,正则表达式一直是一头雾水,今天决定把它好好研究研究。

1.什么是正则表达式

正则表达式,又称正规表示式、正规表示法、正规表达式、规则表达式、常规表示法(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些匹配某个模式的文本。

通俗来讲:正则表达式是一组由字母和符号组成的特殊文本, 它可以用来从文本中找出满足你想要的格式的句子.

2.js中Regexp对象

Javascript 通过内置对象RegExp支持正则表达式,有两种方法实例化RegExp对象

2.1字面量方法

const reg = /bqingb/g

2.2构造函数

const reg = new RegExp(’bqingb’,‘g’)

3.正则表达式语法

3.1 元字符

正则表达式主要依赖于元字符. 元字符不代表他们本身的字面意思, 他们都有特殊的含义. 一些元字符写在方括号中的时候有一些特殊的意思. 以下是一些元字符的介绍:

点运算符 .

点运算符匹配除了换行符以外的任意字符

3.2 字符类

[] 方括号用来指定一个字符集,在方括号中使用连字符来指定字符集的范围,并且方括号中的字符集不关心顺序

否定字符类

一般来说表示一个字符串的开头,但当它用在方括号里面的时候,表示否定的关系。比如[ar]匹配一个后面跟着ar的除了c的任意字符。

3.3 重复次数

*3.3.1 字符

*号匹配在 *之前的字符出现大于等于0次,就是出现0次或多次

3.3.2 字符

号匹配 号之前的字符出现 >=1 次.

3.3.3 ?字符

?表示在?之前的字符为可选,即表示出现0次或者1次。比如[T]?he匹配字符串he和The

3.4 {} 号

在正则表达式中 {} 是一个量词, 常用来一个或一组字符可以重复出现的次数. 例如, 表达式 [0-9]{2,3} 匹配最少 2 位最多 3位 0~9 的数字.

3.5 范围类[-]

正则表达式支持一定的范围规则比如[a-z] [0-9] [A-Z]

3.6 | 或运算符

3.7 转码特殊字符

反斜线 在表达式中用于转码紧跟其后的字符. 用于指定 { } [ ] / * . $ ^ | ? 这些特殊字符.如果想要匹配这些特殊字符则要在其前面加上反斜线 .

3.8 边界

字符

含义

^

以^后面的字符开头

$

以 $前面的字符结尾

b

单词边界,指[a-zA-Z0-9]之外的字符

B

非单词边界

3.9 修饰符(i, g, m)

修饰符

描述

i

忽略大小写

g

全局搜索

m

multiple lines多行匹配

4. 简写字符集

正则表达式提供一些常用的字符集简写. 如下:

简写

描述

.

除换行符外的所有字符

w

匹配所有字母数字,等同于[a-zA-Z0-9]

W

匹配所有非字母数字,即符号,等同于[^w]

d

匹配数字: [0-9]

D

匹配非数字:[^d]

s

匹配所有空格字符,等同于: [tnfrp{Z}]

S

匹配所有非空格字符: [^s]

f

匹配一个换页符

n

匹配一个换行符

r

匹配一个会车符

t

匹配一个制表符

5. 贪婪匹配与惰性匹配 (Greedy vs lazy matching)

正则表达式默认采用贪婪匹配模式,在该模式下意味着会匹配尽可能长的子串。我们可以使用 ? 将贪婪匹配模式转化为惰性匹配模式

6. 零宽度断言(前后预查)

正则表达式中有前瞻(Lookahead)和后顾(Lookbehind)的概念,这两个术语非常形象的描述了正则引擎的匹配行为。需要注意一点,正则表达式中的前和后和我们一般理解的前后有点不同。一段文本,我们一般习惯把文本开头的方向称作“前面”,文本末尾方向称为“后面”。但是对于正则表达式引擎来说,因为它是从文本头部向尾部开始解析的(可以通过正则选项控制解析方向),因此对于文本尾部方向,称为“前”,因为这个时候,正则引擎还没走到那块,而对文本头部方向,则称为“后”,因为正则引擎已经走过了那一块地方。

6.1 正向前瞻

定义一个正向前瞻要使用(),在括号内部使用一个问好和等号:(?=xxx)

6.2 负向前瞻

负向前瞻只需要把正向前瞻的=改成! 即(?!xxx) 表达式 (T|t)he(?!sfat) 匹配 The 和 the, 且其后不跟着(空格)fat.

6.3 正向后顾

定义一个正向后顾要使用(),在括号内部使用一个问好、小于号和等号?<=xxx 用于筛选所有匹配结果, 筛选条件为 其前跟随着断言中定义的格式. 例如, 表达式 (?<=(T|t)hes)(fat|mat) 匹配 fat 和 mat, 且其前跟着 The 或 the.

6.4 负向后顾

和正向后顾相似,只需要把=改成!,?<! 用于筛选所有匹配结果, 筛选条件为 其前不跟随着断言中定义的格式. 例如, 表达式 (?<!(T|t)hes)(cat) 匹配 cat, 且其前不跟着 The 或 the.

7.应用

7.1 手机号正则

/^1[34578][0-9]{9}$/

7.2 URL分组替换

/http:(//. .com)/

7.3 日期匹配与分组替换

/^(d{4})/-/-$/

好了好了,就这么多了,祝大家学习愉快

0 人点赞