ECMA script - 核心语法5

232 阅读1分钟

1、*****正则表达式:

 什么是:定义字符串中【字符出现规则】的一个表达式
 何时使用:切割 替换【验证】
 如何使用:语法:/正则表达式/
1、最简单的正则:关键字原文	"no"	->	/no/gi 只要用上正则就可以添加后缀
	g:全部	i:忽略大小写
2、备选字符集:/[备选字符集]/
	强调:1、一个中括号,只管一位数字
	           2、正则表达式【默认只要满足条件,不管其他了】,解决:前加^,后加$:/^[备选字符集]$/ - 
		代表要求:用户从头到尾必须完整匹配我们的要求 - 只要是做验证就必然前加^,后加$
	特殊:如果备选字符集中的ascii码是连续的,中间的部分可用-代替掉
		一位数字:[0-9]
		一位字母:[A-Za-z]
		一位数字、字母、下划线:[0-9A-Za-z_]
		一位汉字:[\u4e00-\u9fa5]

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

3、预定义字符集:前辈们提前定义好的,我们直接使用的
	目的:简化备选字符集
	一位数字:\d		===	[0-9]
	一位数字、字母、下划线:\w	===	[0-9A-Za-z_]
	一位空白字符:\s		===	包含:空格、换行、制表符	
	
	一位除了换行外的任意字符:.	- 	很少使用,范围太广了

	建议:优先使用预定义字符集,满足不了的时候再用备选字符集自定义

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

4、量词:规定一个字符集出现的次数
     有明确数量
	字符集{n,m}:前边相邻的字符集,最少出现n次,最多出现m次
	字符集{n,}:前边相邻的字符集,最少出现n次,多了不限
	字符集{n}:前边相邻的字符集,必须出现n次

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

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

6、指定匹配位置:
	^:开头
	$:结尾
	特殊:如果两者同时出现,要求从头到尾完全匹配 - 只要是做验证,必须加上

7、密码验证:4位,数字和字母,必须出现一位大写和一位数字
	/^[0-9A-Za-z]{4}$/
	预判公式:(?![0-9]+$) -> 不能全由数字组成
		(?![a-z]+$) -> 不能全由小写组成
		(?![0-9a-z]+$) -> 不能全由数字组成,也不能全由小写组成,也不能只由数字和小写的组合组成

	/^(?![0-9a-z]+$)(?![A-Za-z]+$)[0-9A-Za-z]{4}$/; - 4位,数字和字母,必须出现一位大写和一位数字
	/^(?![0-9a-z]+$)(?![A-Za-z]+$)(?![A-Z0-9]+$)[0-9A-Za-z]{4}$/ - 4位,数字和字母,必须出现一位大写和一位数字和小写
		

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

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

2、*****替换
	1、基础替换法:
		var newStr=str.replace("固定关键字"/regexp,"新内容");

	2、高级替换法:
		var newStr=str.replace("固定关键字"/regexp,function(a,b,c){
			console.log(a);//第一个形参保存的是正则匹配到的每一个关键字
			console.log(b);//第二个形参保存的是正则匹配到的每一个关键字的第一个字符的下标
			console.log(c);//原文本身
			return a.length==2?"**":"***";
		});

	3、格式化:在使用replace替换时,如果搭配上了正则,并且正则中加入分组,那么我们的高级替换法会得到更多的形参
		  有几个分组,就会多出几个形参。
		var newStr=id.replace(reg,function(a,b,c,d,e,f,g,h){
		        console.log(a);//第一个形参保存的是正则匹配到的关键字
			console.log(b);//第二个形参会第一个分组匹配到的关键字
			console.log(c);//第三个形参会第2个分组匹配到的关键字
			console.log(d);//第四个形参会第3个分组匹配到的关键字
				       //....说不清楚有多少个,具体看有多少个分组
			console.log(e);//关键字下标
			console.log(f);//原文本身
			return c+"年"+d+"月"+e+"日";
		})
		

3、*****正则对象:API

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

	为什么有时候要加 前加^后加$,为什么有时候又要加后缀g
		1、验证:前加^后加$ - 用户要和我们的规则完全匹配
		2、替换:加后缀g
	
2、API:var bool=reg.test(用户输入的东西);
	返回true,说明用户验证成功,否则验证失败

ECMAscript - 核心语法1 - 掘金 (juejin.cn)
ECMAscript - 核心语法2 - 掘金 (juejin.cn)
ECAM script - 核心语法3 - 掘金 (juejin.cn)
ECMA script - 核心语法4-1 - 掘金 (juejin.cn)
ECAM script - 核心语法4-2 - 掘金 (juejin.cn)
ECMA script - 核心语法6 - 掘金 (juejin.cn)
ECMA script - 核心语法7-1 - 掘金 (juejin.cn)
ECMA script - 核心语法7-2 - 掘金 (juejin.cn)
ECMAscript 8 - 掘金 (juejin.cn)
ES5&ES6 - 掘金 (juejin.cn)