113、正则表达式

本文详细介绍了正则表达式的各种匹配规则和用法,包括边界约束、原子表、原子组、匹配次数、区间匹配等,并通过具体示例展示了如何匹配日期、排除特定字符、验证用户名格式等。此外,还讲解了正则表达式在实际场景中的应用,如在字符串查找和处理中的重要作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 或者 | 

匹配其左右两侧,一个满足即可。

let str = "dqudwehej"
console.log(/u|@/.test(str)) //true。 str中有u或@即可。

2. 原子表() :括号的内容满足一个即可,需要加|

let str = "020-9999999"
console.log(/(010|020)\-\d{7,8}/.test(str)) //true。

//解释
(010|020): 只要有一个满足即可,满足后再继续匹配后面的\-\d{7,8}
\- :对-号进行转义
\d{7,8}: 7或8位数字

3. 原子组[] : 括号内的内容满足一个即可,不用加|

let str = "333333"
console.log(/[123]/.test(str)) //true。str中有3

[()] :()放到原子组中,就是单纯的括号,不是原子表 

4. 正则表达式中的转义

  1. . : 除换行外的任意字符。 转义为\.
  2. \d: 数字字符
  3. /: 转义为\/
  4. - :转义为\- (可能不需要转义)

5. 边界约束: ^开始,$结束

let str = 'vzx23vgf32a'
console.log(/\d/.test(str)) // true  \d代表数值 str中但凡有个数字就满足
console.log(/^\d/.test(str)) // false ^表示以数字开始; str = 3vgf就为true
console.log(/^\d$/.test(str)) // false ^表示以数字开始,$表示以数字结束; str = 2就为true

6. 匹配的范围和次数

  • \d :匹配数字,即 0~9
  • \D:除了数字
  • \w :匹配数字、字母、下划线
  • \W:除了数字、字母、下划线
  • . :匹配除换行的所有字符
  • g :全局匹配
  • i :不区分大小写
  • m :多行匹配(暂不管它,我用的少)

  • ? :最多出现 1 次
  • + :至少出现 1 次
  • * :出现任意次数
  • {} :分下面四种情况
    • {n}代表前面的匹配符出现 n 次
    • {n, m}出现次数在 n~m 之间
    • {n, }至少出现 n 次
    • {, m}最多出现 m 次
//全局匹配g
let str = 'bhbs_sd23-v21v-'
console.log(str.match(/\w+/g)) // [ 'bhbs_sd23', 'v21v' ]

// 用户名需求:以字母开始,后跟字母数字下划线,用户名长度在5~10位
console.log(/^[a-z]\w{4,9}$/.test('sdr7sw')) // true 因为[a-z]已经占了一位了,所以是{4,9}

 7. 匹配日期

// 匹配日期,2022-02-03 和 2022/02/03 都可匹配
let str = "2022-02-03" 
/*
  \d{4}:前四位为数字;
  [-\/]:取- 或者 /,需要对/转义为\/;
  \d{2}两位数字
*/  
console.log(/^\d{4}[-\/]\d{2}[-\/]\d{2}$/.test(str)) //true。

上述会出现2022/02-03匹配成功的情况,故使用\1

console.log(/^\d{4}[-\/]\d{2}\1\d{2}$/.test(str)) //true。

\1  : 前一个[]以什么分割,后一个也要一样

8. 区间匹配 

let str = `2021vxfcx`

let reg = /[0-9]/g // 取到str中0-9的数 注意只能升序不能降序
console.log(str.match(reg)); // [ '2', '0', '2', '1' ]

[0-9] 等价于[0123456789]

匹配4到7位,以字母开头的字符串。该字符串可包含数字、字母、下划线;

let str = "sF_3a"   
console.log(/^[a-z]\w{3,6}$/i.test(str)) //true
/*
  [a-z]:以字母开头,取一位;
  \w{3,6}:接下来取3~6位的字母、数字 或下划线;
  i: 不区分大小写;
*/

9. 排除匹配^

let str = `2021vxfcx`
let reg = /[^vx]+/g // 除了vx其他的都匹配
console.log(str.match(reg)); // [ '2021', 'fc' ]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值