目录
一、正则概念
正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。
官话这么说,人话就是你创建的一种字符串的规则,比如开头是字母,结尾要数字,比如邮箱必须带@和.com。创建了这样的规则,你就能用它干三件事:匹配;提取;替换。
如果这么说还不是很清楚,那我举个常见的例子,现在不管做什么都要注册,但账号密码的要求往往不太一样,你注册时写入的账号密码不对时,他会提醒你输入的不符合规范,这个你肯定经历过。那他是怎么知道你输入的不对呢,就是用的正则表达式,他创建了一种对账号密码这个字符串的规则,你每次输入完就会去和它的规则匹配,不符合就会报错,这样大概能理解了吗。
二、正则的组成
1.常用字符
普通数字,字母,中文,符号,特殊字符......
2.常用元字符
元字符 | 说明 |
\d | 匹配至少有一个数字 |
\D | 匹配至少任意一个非数字的字符 |
\w | 匹配至少一个字母或数字或下划线 |
\W | 匹配至少有一个不是字母,数字,下划线 |
\s | 匹配至少任意的空白符 |
\S | 匹配至少一个不是空白符的字符 |
. | 匹配除换行符以外的任意单个字符 |
^ | 表示匹配行首的文本(以谁开始) ^\d |
$ | 表示匹配行尾的文本(以谁结束)\d$ |
3.限定符
限定符 | 说明 |
* | 重复零次或更多次\d* /^ab*$/:表示一个字符串有一个a后面跟着零个或若干个b。("a", "ab", "abbb",……); |
+ | 重复一次或更多次\d+ / ab+/:表示一个字符串有一个a后面跟着至少一个b或者更多; |
? | 重复零次或一次 /^ab?$/:表示一个字符串有一个a后面跟着零个或者一个b;
|
{n} | 重复n次 |
{n,} | 重复n次或更多次 |
{n,m} | 重复n到m次 |
4. 其他字符
[] 字符串用中括号括起来,表示匹配其中的任一字符,相当于或的意思 [0-9]
[^] 匹配除中括号以内的内容
\ 转义符: \的用法 \ 主要是用法是在正则表达式中的特殊符号转换为它本身的意思
| 或者,选择两者中的一个。注意|将左右两边分为两部分,而不管左右两边有多长多乱
() 从两个直接量中选择一个,分组
eg:gr(a|e)y匹配gray和grey
[\u4e00-\u9fa5] 匹配汉字
三、正则表达式的创建
两种方法:
1.字面量创建
var reg1 = /aaa/;
这种写法里面不能传变量。
2.new RegExp
var a= "aaa"
var reg2 = new RegExp(a);
这种写法里面必须传一个变量。
四、正则匹配
var str1 = "12345aaa12345";
console.log(reg2.test(str1));
打印结果为true,因为在这个字符串中找到了aaa
五、正则抓取
var str2 = "1234567qwerttt345678____345,,345";
var reg3 = /\d/g;
console.log(str2.match(reg3));
抓取到的是个伪数组
第一种方法创建:如果想要全局,在最后加g,即/aaa/g
第二种方法创建:想要全局,(aaa,g)。 注意:这里的规则不要加//
六、正则替换
var str3 = "6q6w33645556665t6y7u";
//把6全换成1
var reg4 = /6/g;
console.log(str3.replace(reg4, 1));
打印结果为1q1w33145551115t1y7u,替换成功
七、正则的插件
如果你用vscode的话,有个插件里面有人家写好的常用的正则表达式。这个插件叫any-rule