持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第29天,点击查看活动详情
多种重复匹配基本使用
- 贪婪匹配 + ,一个或者多个,shi后面可以有一个或者多个t,一个也没有不行,匹配不上。号和+号都是贪婪匹配。 表示任意个,有也行,没有也行,有多少都行
let shi = `shitttttttt`
let reg = /shit+/;
console.log(shi.match(reg))
// 'shitttttttt', index: 0, input: 'shitttttttt', groups: undefined]
- 花括号{}里面加数字,表示匹配的个数,一个就是固定个数,例如{3},就是3个,前面一个加,{3,},表示3到无穷多都可以,两个数表示区间{2,3},2个和3个都可以
- 问号也是贪婪的,问号表示,可有可无,有1个行,没有也行,但是如果后面有一个就会匹配上,而不会因为麻烦放弃匹配
let shi = `shitttttttt`
let reg = /shit?/;
console.log(shi.match(reg))
// ['shit', index: 0, input: 'shitttttttt', groups: undefined]
禁止贪婪匹配
在修饰符后面加一个问号 ❓,就表示禁止贪婪,就会按照最少匹配的原则匹配了, +?表示一个或者多个,此时就只匹配1个 *?表示任意个,此时匹配0个 ??匹配0个 {2,100}? 匹配1个
const shi = 'shiddddd'
const reg = /shid+?/
console.log(shi.match(reg))
重复匹配对原子组的影响
原子组后面的➕号,是修饰原子组的,而不是单个字符,下面可以匹配到shi,也可以匹配到shishishishi,不是匹配多个shi,需要注意
let shi = `shitttshishishishit`
let reg = /(shi)+/g;
console.log(shi.match(reg))
批量使用正则完成密码校验
有些时候要求可能比较多,可以使用正则组来完成校验,假如产品经理需要
- 包含字母和数字,位数在5-9位之间。
- 必须包含一个大写字母
- 必须包含一个数字, 满足上面三个条件才算匹配成功,写一个正则可能相对复杂,不好些,可以把条件拆分成小的正则来处理,就比较好整理了。
const input = document.querySelector('[name="password"]');
input.addEventListener('keyup', e => {
const regs = [/^[0-9a-z]{5,9}$/i, /[A-Z]/, /[0-9]/];
let status = regs.every(reg => reg.test(e.target.value));
console.log(status)
})