1、正则表达式:定义字符串中字符出现规则的表达式
何时使用:切割 替换 [验证]
如何使用:
语法:/正则表达式/
1、最简单的正则就是关键字原文
如:"no"—>/no/后缀
后缀:g—找全部 i—忽略大小写
2、备选字符集:
1、语法:/^[备选字符集]$/
2、强调:
1、一个中括号只管以为字符
2、问题:
正则表达式默认只要满足就不管后续,而做验证希望从头到尾完全匹配
解决:前加^后加$,两者同时使用,代表从头到尾完全匹配/^[备选字符集]$/—只做验证
3、特殊:
如果备选字符集中的ASCII码是连续的,那么可用-省略掉中间部分
如:
一位数字:[0-9];
一位字母:[A-Za-z];
一位数字、字母、下划线:[0-9A-Za-z_ ];
一位汉字:[\u4e00-\u9fa5];
除了xxx之外的:[^0-9]-很少使用,范围太广
3、预定义字符集:提前定义一些字符集,方便程序员—简化备选字符集
1、一位数字:\d===>[0-9]
2、一位数字、字母、下划线:\w===>[0-9A-Za-z_ ]
3、一位空白字符:\s
一位除了换行外的任意字符:. —很少使用,范围太广
建议:优先使用预定义字符集,预定义满足不了我们再用备用字符集补充
注意:不管备选字符集,还是预定义字符集,一个只能管一位
4、量词:规定一个字符集出现的次数
1、有明确数量
字符集{n,m}:前面相邻的字符集,至少n个,最多m个
字符集{n,}:前面相邻的字符集,至少n个,多了不限
字符集{n}:前面相邻的字符集,必须n个
2、无明确数量
字符集?:前面相邻的字符集,可有可无,最多一个
字符集*:前面相邻的字符集,可有可无,多了不限
字符集+:前面相邻的字符集,至少一个,多了不限
5、选择和分组
选择:在多个规则中选一个
规则1|规则2
分组:将多个字符集临时组成一组子规则
(规则1|规则2)
6、指定匹配位置
^:开头
$:结尾
特殊:两者同时使用,前加^后加$,表示从头到尾要求完全匹配—验证
7、密度强度验证
预判公式:
(?![0-9]+$)->不能全由数字组成,可能有大写、小写、汉字、日文、特殊符号...
(?![a-z]+$)->不能全由小写组成,可能有数字、汉字、大写、日文、特殊符号...
(?![0-9a-z]+$)->不能全由数字组成、也不能全由小写组成、也不能全由数字和小写组成
<script>
let m="12Aa"
let reg=/^(?![0-9a-z]+$)(?![0-9A-Z]+$)[0-9A-Za-z]{2,4}$/;
console.log(reg.test(m));
</script>
2、支持正则表达式的字符串API
1、切割:let 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、格式化
<script>
let id="500381201203078548";
let reg=/(\d{6})(\d{4})(\d{2})(\d{2})(\d{4})/;
let id1=id.replace(reg,function(a,b,c,d,e,f,g,h){
console.log(a);//正则匹配到的关键字
console.log(b);//第1个分组获得的内容会保存在第2个形参之中
console.log(c);//第2个分组获得的内容会保存在第3个形参之中
console.log(d);//第3个分组获得的内容会保存在第4个形参之中
console.log(e);//第4个分组获得的内容会保存在第5个形参之中
console.log(f);//第5个分组获得的内容会保存在第6个形参之中
console.log(g);//正则匹配到的关键字的下标
console.log(h);//原字符串
return c+"年"+d+"月"+e+"日";
})
console.log(id1);
</script>
问题:何时加^后加$,何时该添加后缀g?
1、前加^后加$—验证
2、替换,希望替换所有—必须加g
3、正则对象
1、创建:
1、直接量:let reg=/正则表达式/后缀
2、构造函数:let reg=new RegExp("正则表达式","后缀");
2、API
验证:let bool=reg.test(用户输入的)