我们测试正则表达式是否正确的方法有很多,例如通过正则表达式找到拼配的字符串:
在vscode编辑器中点击搜索框中的第三个按钮就可以实现:
或者 在浏览器中的控制台也可以实现:
我们可以通过下面的在线网站来测试你写的正则是否正确----推荐使用
https://regex101.com/
下面是网站截图,使用方法:
下面来正式学习正则表达式:
一、限定符
1、限定符--问号 ?
used?
这个问号代表它前面这个字符d需要出现0次或者1次,也就是d这个字符可有可无
可以看到used? 可以匹配到 use或者used
2、限定符--星号 *
ab*c
他会去匹配0个或多个字符,代表着b可以没有也可以出现多次
3、限定符--加号 +
ab+c
他会匹配出现1次以上的字符,也就是匹配b出现1次或1次以上的字符
4、限定符精确匹配--{}
ab{6}c
我们要指定这里b出现的次数为6次,就在花括号里面写上6,
ab{2,6}c
当然花括号也允许我们输入一个范围。比如我们希望字符出现的次数为2到6之间,此时代表得是包含2和6的
ab{2,6}c
ab{2,}c
还有这种写法,代表匹配的是b的次数为2次以上的。
注意:我们上面讲的都是匹配的单个字符,想匹配多个字符怎么办?
答:将多个字符用括号括起来再加上限定符去匹配。
二、“或” 运算
a (cat | dog)
注意:括号必不可少
三、字符类
[abc]+
这里方括号里面的内容代表要求你匹配的字符只能取自于他们,所以只要包含他们其中的一个就会匹配上
另外,我们可以在中括号中指定字符的范围
[a-z]
代表所有的小写英文字符
[a-zA-Z0-9]+
匹配的是小写a-z以及大写A-Z以及数字的字符
脱字符尖号 ^
如果我们在方括号前面写一个尖号脱字符,则代表要求匹配除了尖号后面列出的(以外)的字符
[^0-9]
代表所有的非数字字符,包括换行符
四、元字符
正则表达式中的大多数元字符都以反斜杠开头
\d
数字字符,等同于[0-9]
\w
代表单词字符(英文、数字及下划线)
\s
空白符(包含Tab和换行符)
\D
与小写d相反,代表非数字字符
\W
代表非单词字符
\S
代表非空白字符
\b
代表单词的开头或结尾,也就是单词的分界处
句点 .
代表任意字符,但不包含换行符
特殊字符 尖号^
会匹配行首的ad
特殊字符 美元符$
会匹配行尾的ad
五、贪婪与懒惰匹配
例如我们想要匹配span的前后标签
有人说,这么写
此时我们可以看到,这样匹配会把整个span标签匹配起来
原因是因为句点符号会匹配尽可能多的字符,所以我们加上问号,问号代表出现0次或者1次,
这样就匹配成功了。
接下来,来看一下简单的实例:
1、颜色值匹配
匹配出所有颜色中十六进制的RGB颜色值
/#[a-fA-F0-9]{6}\b/
解析:因为十六进制都是a-f之间的值,包含大小写,并且是6位,接着我们用\b来表示单词的结尾
2、IP地址匹配
\d+会匹配任何长度大于1的数字
\.代表句点这个符号,因为句点在正则中是特殊的字符,因此需要反斜杠转义
此时我们看到还匹配出一个错误的ip,因为ip都是0-255的数字
所以上面的方案不可行,看如下方案,我们按位匹配
25[0-5] 第一种开头是25,第三位肯定是0-5之间
2[0-4]\d+ 第二种开头是2,第二位是0-4,那第三位可以取0-9之间任意的数用\d代替
[01]\d\d 第三种开头是0或者1,那第二位和第三位可以取0-9的任意数,都用\d代替
我们知道ip地址每一部分都可以是两位或者一位,所以我们在第三种情况开头和结尾都加上问号即可:[01]?\d\d?
数字部分已经匹配好了,接下来匹配句点
(25[0-5]|2[0-4]\d|[01]?\d\d?)\.)
因为句点是只有三个,所以我们对于加上句点的正则用{3}只限制前三部分,最后一部分复制前面的即可
\b((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)\b
这样就筛选好啦,成功的将256.1.1.0这个不符合要求的ip过滤掉。
总结:
你学会啦吗~