正则表达式

前言:今天学习的时候遇到了正则表达式,还不怎么会,故来学习一下

1.1 什么是正则表达式

正则表达式是用于匹配字符串中字符组合的模式,当搜索文本中的数据是,可以使用搜索模式来描述搜索的内容,

很多语言都支持正则表达式,其实就是匹配字符的规则,可以用来判断字符串中是否含有某个字符或者某个字符串

或者判断用户输入的手机号是否合法

1.2 定义正则表达式

正则表达式的规则为

const 变量名 = /表达式内容/;

一个实例

var a=/aa/i;

上面的/aa/i是一个正则表达式,aa是模式,在搜索中使用,i是修饰符,把搜索改为大小写不敏感

1.3 使用字符串

在js中,正则表达式有两个字符串方法,search()replace 前一个方法使用表达式来搜索匹配,然后返回匹配

位置,replace() 方法返回模式被替换处修改后的字符串

具体使用如下

var str = "aBc";
var n = str.search(/b/i);
alert(n);

返回的是b的位置,1,由于设置了i,既大小写不敏感,所以会正常查询

var str = "Visit Microsoft!";
var res = str.replace(/microsoft/i, "W3School");

1.4 正则表达式的修饰符

i 执行对大小写的匹配

g 执行全局匹配,查找所有匹配而不是在找到第一个匹配后停止

m 执行多匹配

1.5 正则表达式的限定符

1.5.1 ?

在正则表达式中?是一个限定符表示前面的字符可以出现0次或者1次

比如 /used?这个正则表达式可以匹配used也可也匹配use

1.5.2 *

*表示前面的字符可以没有,但也可以出现零次或者多次,比如 /ab*c

这个正则表达式可以匹配abc,匹配ab,也可也匹配abbbbbc,都可以与之匹配

1.5.3 +

该限定符和*类似,只不过*可以匹配前面字符未出现或者多次出现的字符串,而+只能匹配前面字符只出现一次

或多次的情况,也就是至少出现一次。

1.5.4{}

用于限定字符出现的次数

比如/ab{2}c就是限定b只出现两次

/ab{2,4}c就是限定b出现2到4次

/ab{2,}就是大于等于2

如果想要重复的不是单个字符,而是字符串,可以用括号括起来,比如

/(ab){2,3}c

就是ab可重复出现2到三次

1.6 | 或运算符

表示选择

比如/a(cat|dog)

匹配可以是 acat ,也可也是 adog

注意添加括号

1.7 字符类

1.7.1 []

该字符类可以快速匹配大小写和字母

比如/[a-z]+

可以匹配由a-z组成的所有字符串

注意,不能省略+

如果为/[a-z]则匹配的是a-z的所有小写字母,而不是字符串

与之用法类似的还有

/[A-Z]+ 用来匹配大写

/[1-9]+用来匹配数字

也可也匹配使用

/[1-0a-z]+

1.7.2 ^[]

用该符号可以匹配除了后面的所有字符

比如/^[a-z]+可以匹配到所有不由a-z组成的字符串

1.8 元字符

\d代表数字字符等同与[0-9]可以匹配任何一个数字字符,注意不是字符串

\w表示单词字符,也就是匹配所有的大小写字母,数字,下划线,注意是字符,不是字符串

\s代表空白符,包含table和换行符

\b 规定匹配的字符必须存在单词边界,比如/aa\b 就只会匹配 aa,不会匹配aaa

\D代表非数字字符,就是匹配不符合数字字符的字符

\W

\S 依次类推这俩的意思

.表示任意字符,如果需要匹配.需要用到\.进行转义

.+可以匹配任意字符串,但不包含空字符.*比前者多了空字符

^ 可以匹配行首

比如/a^可以匹配所有行首的a

/a$可以匹配所有行尾的a,注意是字符

1.9 贪婪模式和懒惰模式

具体见此篇

2.0 特殊字符的转义

对于普通的特殊字符,使用单个反斜杠转义就行,单$的转义需要使用\\$ 这样使用两个反斜杠进行转义

如果我们想匹配某个不可见字符,该怎么办呢? 比如通常可以代替空格进行绕过的制表符,虽然是不可见字符,我们可以通过unicode进行使用,如果想对其进行匹配,该怎么办呢?

对于此种情况,可以直接匹配unicode来达成效果,比如制表符,它的匹配就是\x09 为了表明匹配的是unicode,还特意使用反斜杠标注一下。

需要注意的是,Unicode在传入后端后就会解码,变成正常的字符,所以应该将一个unicode看成一个整体,单独的匹配%是无法完成匹配的。

posted @ 2023-08-27 17:44  折翼的小鸟先生  阅读(17)  评论(0编辑  收藏  举报