二阶段 day10

83 阅读1分钟

一、*****正则表达式:定义字符串中字符出现规则的表达式

何时使用:切割 替换 **【验证】**!
如何使用:语法:**/正则表达式/**

1、最简单的正则就是关键字原文 "no" -> /no/后缀

后缀:g:找全部		i:忽略大小写

2、备选字符集:/^[备选字符集]$/

	1、强调:一个中括号,只管一位字符
            2、问题:正则表达式默认只要满足就不管后续了,而我们做验证的人,
            希望的是用户从头到尾按照我们的要求来,希望从头到尾完全匹配:
	3、解决:前加^,后加$,两者同时使用,代表要求从头到尾完全匹
            配/^[备选字符集]$/ - 只要做验证必加!
            特殊:如果备选字符集中的ascii码是连续的,那么可用-省略掉中间部分
	比如:
	一位数字:[0-9];
	一位字母:[A-Za-z];
	一位数字、字母、下划线:[0-9A-Za-z_]
	一位汉字:[\u4e00-\u9fa5]

	除了xxx之外的:[^0-9] - 很少使用,范围太广了

3、预定义字符集:前辈们提前定义了一些字符集,方便我们程序员 - 简化了备选字符集

		一位数字:\d ===>[0-9]
		一位数字、字母、下划线:\w ===> [0-9A-Za-z_]
		一位空白字符:\s

		一位除了换行外的任意字符:.   - 很少使用,范围太广了
         建议:优先使用预定义字符集,预定义满足不了我们再用备选字符集补充

	问题:不管是备选字符集,还是预定义字符集,一个都只管一位

4、量词:规定一个字符集出现的次数:

		1、有明确数量:
			字符集{n,m}:前边相邻的字符集,至少n个,最多m个
			字符集{n,}:前边相邻的字符集,至少n个,多了不限
			字符集{n}:前边相邻的字符集,必须n个

		2、无明确数量:
			字符集?:前边相邻的字符集,可有可无,最多1个
			字符集*:前边相邻的字符集,可有可无,多了不限
			字符集+:前边相邻的字符集,至少一个,多了不限

5、选择和分组:

		选择:在多个规则中选一个
			规则1|规则2
		分组:将多个字符集临时组成一组子规则
			(规则1|规则2)

6、指定匹配位置

		^:开头
		$:结尾
特殊:两者同时使用,前加^,后加$,表示从头到尾要求完全匹配 - 只要你做【验证】

7、密码强度验证:2-4位,可以输入数字、字母,但是必须出现一位大写和一位数字的组合

	/^[0-9A-Za-z]{2,4}$/
预判公式:
(?![0-9]+$) -> 不能全由数字组成,可能有大写、小写、汉字、日文、特殊符号...
(?![a-z]+$) -> 不能全由小写组成,可能有数字、大写、汉字、日文、特殊符号...
(?![0-9a-z]+$) -> 不能全由数字组成、也不能全由小写组成、也不能全由数字和小写
的组合组成

比如:
/(?![0-9a-z]+$)(?![A-Za-z]+$)[0-9A-Za-z]{2,4};//2-4位,可以输入数字、字
母,但是必须出现一位大写和一位数字的组合
/(?![0-9a-z]+$)(?![A-Za-z]+$)(?![A-Z0-9]+$)[0-9A-Za-z]{2,4}/;//必须三者
都有
/(?![0-9A-Za-z]+$)[0-9A-Za-z_]{2,4}/;//至少要有下划线

二、*****支持正则表达式的字符串API

1、切割:var arr=str.split("固定切割符"/RegExp);

2、*****替换:很有可能出现在笔试之中
	1、基本替换法:
		str=str.replace(/正则表达式/后缀,"新内容");
		//replace支持支持正则,并且搭配上后缀g就可以找到全部
		//缺陷:替换的新内容是一个固定的

	2、高级替换法:
		str=str.replace(/正则表达式/后缀,function(a,b,c){

// console.log(a);//正则匹配到的关键字 // console.log(b);//正则匹配到的关键字的下标 // console.log(c);//原字符串 return 判断a关键字的长度,而返回不同的星星数量 });

	3、格式化:身份证
		var id="500103198602215933";
		var reg=/(\d{6})(\d{4})(\d{2})(\d{2})(\d{4})/;
		id.replace(reg,function(a,b,c,d,e,f,g,h){
			//再replace的时候,正则出现了分组,我们会得到更多的形参
			//再形参a的后面就会出现n个形参,就看你有多少个分组
			//第1个分组获得的内容会保存在第2个形参之中
			//第2个分组获得的内容会保存在第3个形参之中
			//...
			//倒数第二个一定是下标
			//倒数第一个一定是原文本身
		})
	      格式化:手机号
		var phone="13452390312";

// var reg=/(\d{4})\d{4}(\d{3})/; // // phone=phone.replace(reg,(a,b,c)=>{ // return b+"****"+c; // }) // // console.log(phone);

	总结:何时前加^后加$,何时又该添加后缀g?
		1、前加^后加$ - 验证
		2、替换,你希望替换所有 - 必须加g

3、正则对象:

创建:
	1、直接量:var reg=/正则表达式/后缀;
	2、构造函数:var reg=new RegExp("正则表达式","后缀");

API:
	1、验证:var bool=reg.test(用户输入的);