1.
什么是正则
使用特定的符号所描述的一种规则
举例:
用户名只能输入 数字、字母、下划线 ,同时数字不可以作为开头,同时用户名不能包含中文
同时长度必须在6-20之间
var str = username;
if( /^([a-zA-Z]\w+){6,20}$/.test(str) ){
//符合规则
}
2.为什么要使用正则表达式?
可以大量的节省验证的工作量
3.如何创建正则表达式?
字面量创建
var reg = /a/
构造函数创建
var reg = new RegExp('a','g');
4.匹配符
\d 数字
\D 非数字
\w 数字字母下划线
\W 非数字字母下划线
\s 空白字符
^ : 以什么开始
$ : 以什么结束
\. : 代表的是.本身。(.有特殊的意义表示除换行以外的意义字符,想代表本身需要转意)
\ :代表着转义
[\u4e00-\u9fa5]:验证中文
5.量词
量词 : 出现元字符的后面,修饰前面的这个字符出现的次数
? : 0-1次 => 可以出现可以不出现
* : 0-多次 => 可以不出现,也可以出现无数次
+ : 1-多次 => 至少出现1次
{n} : 出现n次
{n,} : 至少出现n次
{n,m} : 出现n到m次
6.正则中的或者:两种 | [ ]
"|" 代表或者 => 使用或者关系的时候,为了保证严谨。我们不妨加小括号来改变优先级。
[xyz] => x或者y或者z中的一个 => 无论中括号多长都是占一个字符
[^xyz] => 除了xyz的任意一个
[+-] => 在中括号这个或者中+和-都是本身
[.] => 代表.本身
[a-z] => 代表的a-z中的一个
[0-9] => 0-9中的一个
\w => [0-9a-zA-Z_]
/[abc]/字符中只要包含一个 a或b或者c就为true
/[^xyz]/ 字符串中只要有一个不是x也不是y也不是z就是true
7.字面量创建和构造函数的区别?
1: 使用字面量的方式是不可以把变量添加到正则中
2 : 构造函数创建方式 => 第一个参数是一个字符串(就是字面量的方式放在两个斜杠中的那些字符) => 第二个参数就是修饰符(img),也是一个字符串
ps: 只要正则中需要引入变量,那么只能使用构造函数创建方式
ps: 如果在构造函数方式创建正则使用\d等特殊元字符,还需要转义一次。也要在前面添加一个'\'
var name = "qianfeng";
var reg = /name/;
var str = "qianfeng"
console.log(reg.test(str))
var name = "hello";
var reg = new RegExp(name);//==>/hello/
var str = "hello";
console.log(reg.test(str))//true
var reg = new RegExp("^\\d+$");
var str = "1234";
console.log(reg.test(str))//true
8.exec捕获 和 match
exec捕获用法:
① 捕获结果: exec的捕获结果是一个数组,数组里的第一项是正则捕获到的内容
② 捕获结果中还包含index属性,是捕获开始的索引位置,input属性是捕获的那个整个字符串
③ 如果捕获当次没有捕获到结果返回null
match是字符的方法 :
match:字符串的方法,捕获出来的是一个数组,必须加g,才能全局捕获
exec实现match
var str = "qian2017feng2018pei2019";
var reg = /\d+/g;
var res = reg.exec(str);
var arr = [];
while(res){ //一直捕获到为null的时候;结束while循环
arr.push(res[0]);
res = reg.exec(str);
}
console.log(arr)
9.正则的修饰符
g : 全文全局匹配
i : 忽略大小写
m : 多行匹配(了解)
10.常用的正则
①.检查邮政编码//共 6 位数字,第一位不能为 0
/^[1-9]\d{5}$/
②.删除一个字符串当中多余空格
str.replace(/\s+/g,"");
③.删除首尾空格
str.replace(/^\s+/g,"").replace(/\s+$/g,"");
④.电子邮件( xxxxx @ xxxx(.xxxx)+)
/^\w+@\w+(\.\w+)+$/
⑤.手机号 1 3|5|8|7|4
/^1[34578]\d{9}$/
⑥.身份证
/^\d{17}(\d|X)$/
⑦.匹配一个QQ邮箱地址 78323432@qq.com
var reg = /^\d+@qq\.com$/
11.replace 替换
replace是字符串的方法,每次只能替换一次,想全局替换,必须加g;