2023-5-23(第十五天)

120 阅读1分钟

正则表达式

概念:定义字符串中字符出现规则的表达式

语法:/正则表达式/

后缀:

  • g:/正则表达式/g 找全部
  • i:/正则表达式/i 忽略大小写

最简单的正则表达式

/原文/

备选字符集[]

/[备选字符集]/
特点
  1. 一个中括号只管一位字符

  2. 正则表达式只要满足了就不管后续,可以对正则表达式前加^后加$,代表从头到尾完全匹配

  3. 如果备选字符集中ASCII码值是连续的,那么可以用-省略掉中间部分

    1. 一位数字:[0-9]
    2. 一位字母:[A-Za-z]
    3. 一位数字/字母/下划线:[0-9A-Za-z_]
    4. 一位汉字:[\u4e00-\u9fa5]
    5. 一位数字/字母/汉字/下划线:[0-9A-Za-z\u4e00-\u9fa5_]
    6. 除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)