正则表达式
概念:定义字符串中字符出现规则的表达式
语法:/正则表达式/
后缀:
- g:/正则表达式/g 找全部
- i:/正则表达式/i 忽略大小写
最简单的正则表达式
/原文/
备选字符集[]
/[备选字符集]/
特点
-
一个中括号只管一位字符
-
正则表达式只要满足了就不管后续,可以对正则表达式前加^后加$,代表从头到尾完全匹配
-
如果备选字符集中ASCII码值是连续的,那么可以用-省略掉中间部分
- 一位数字:[0-9]
- 一位字母:[A-Za-z]
- 一位数字/字母/下划线:[0-9A-Za-z_]
- 一位汉字:[\u4e00-\u9fa5]
- 一位数字/字母/汉字/下划线:[0-9A-Za-z\u4e00-\u9fa5_]
- 除xxx之外:[^]
预定义字符集
\d //1.一位数字
\w //2.一位数字/字母/下划线
\s //3.一位空白字符(空格、制表符、换行)
. //4.一位除了换行之外的任意字符
量词
有明确数量
- 字符集{m,n} --------满足字符集规则的字符至少有m个,最多n个
- 字符集{m,} --------满足字符集规则的字符至少有m个,最多不限
- 字符集{n} --------满足字符集规则的字符必须是n个
无明确数量
- 字符集? --------满足字符集规则的字符可有可无,最多1个
- 字符集* --------满足字符集规则的字符可有可无,最多不限
- 字符集+ --------满足字符集规则的字符至少有1个,最多不限
选择和分组
选择
在多个规则中选一个:规则1|规则2
分组
将多个字符集临时组成一组子规则: (规则1|规则2)
指定匹配位置
- ^ 开头
- $ 结尾
- /^ $/ 从头到尾完全匹配
经典使用场景:密码强度
预判公式
(?![0-9]+$) --------不能全由数字组成
(?![a-z]+$) --------不能全由小写字母组成
(?![0-9a-z]+$) --------不能全由数字组成、不能全由小写字母组成、不能全由数字和小写字母的组合组成
使用公式
//2-4位密码,可以输入数字、字母、但是必须出现一位大写字母和一位数字
/^(?![0-9][a-z]+$)(?![A-Z][a-z]+$)[0-9A-Za-z]{2,4}$/
//2-4位密码,可以输入数字、字母,但是必须出现三者的组合
/^(?![0-9][a-z]+$)(?![A-Z][a-z]+$)(?![A-Z][0-9]+$)[0-9A-Za-z]{2,4}$/
字符串中支持正则的API
切割 split
let arr=str.split("固定切割符"/RegExp)
替换 replace
基础替换法
str=str.replace(RegExp,"新内容")
高级替换法
str=str.replace(RegExp,function(a,b,c){})
//a-----正则匹配到的关键字
//b-----正则匹配到的关键字的下标
//c-----原字符串
格式化
let idCard="522501200006155649"
let reg=/\d{6}(\d{4})(\d{2})(\d{2})\d{4}/
let birth=idCard.replace(reg,function(a,b,c,d,e,f){})
//a-----正则匹配到的关键字
//b-----第一个分组获得的内容
//c-----第二个分组获得的内容
//d-----第三个分组获得的内容
//e-----正则匹配到的关键字的下标
//f-----原字符串
正则对象
创建
直接量方式
let reg=/^$/后缀
构造函数方式
let reg=new RegExp("正则表达式","后缀")
API
验证 test
let bool=reg.test(str)