正则表达式

前言

正则表达式是用来处理字符串的,它可以让你节省很多很多的代码,例如:

如果一个输入框不让提交,这个过程就是表单验证的过程。同理:

  1. 如果我们输入的不是手机号,就不让提交
  2. 如果我们输入的不是邮箱地址,就不让提交
  3. 如果我们输入的不是身份证号,不然提交

上面这些操作都是表单验证的场景,而这些都需要用到正则表达式

正则的使用

想要创建一个正则表达式,需要我们通过new RegExp进行创建。也可以通过//,建议使用后者,在特定时候,必须使用前者

let reg = new RegExp("规则", "修饰符")
let reg = /规则/修饰符

验证字符串是否符合正则表达式

reg.test(字符串) // 返回值为true或者false

宽度

正则表达式中一个字符是一个宽度,会和字符串中的对应的符合条件的字符尽心匹配,如:

let reg = /a/
let str = "sva"

// reg就会匹配到a

let reg = /aa/
let str = 'svab'
// 这个不能匹配

如果我们要匹配的内容是一个范围

使用[]表示一个范围,宽度为1

let reg = /[abcdefghjklmnopqrstuvwxyz]/ // 虽然有26个字母,但是只匹配一个宽度
let reg = /[a-z]/ // 如果式连贯的字母,就可以写a-xxx 如a-c表示 abc
let reg = /[a-zA-Z]/
let reg = /[a-cA-C_0-4]/

如果表示不包含[]中的内容

/[^a-c]/ // 不包含a-c 

以什么开始 以什么结束

为了确保我们匹配到的字符是一个完整没有其他不符合要求的字符,一般我们需要设置开始和结束的标志

let reg = /^规则/
let reg = /规则$/
let reg = /^规则$/

将匹配宽度增加

在我们进行匹配时,有很多时候会出现相同匹配情况,我们可以设置匹配宽度 {m, n}例如:

QQ号是5-11位

let qqReg = /^[1-9][0-9]{4,10}$/

数量可以有以下写法

{m, n} // m - n位
{m} // 固定m位
{m,} // 大于等于m位

\ 转义符

我们正则表达式中,有些字符有自己的功能,我们就需要通过转义符来实现另外一种功能,例如

  • d表示字母d,\d表示数字
  • w表示字母w,\w表示所有字符
  • \表示转移,\\表示普通的符号\

字符大写

如果一个元字符中字母大写,则一般表示,小写的反义结果,例如

\d表示数字 \D 表示非数字

* + ?

  • * 表示 0次或者多次 {0, }
  • +表示1次或者多次 {1, }
  • ? 表示0次或者1次 {0, 1}

.是除换行符外的任意字符

如果我们想要匹配标点符号.我们需要\.

\b \B

表示单词的边界,一般你用不上,例如,我想匹配我的className

<div class="box box1 box2"></div>

\B表示非单词边界

\d \D

\d等同于[0-9] 表示数字

\D等同于[^0-9] 非数字

\n \s \S \r

\n换行符 \r回车符

\s空白符 \n \r \t \v都是空白符

\S表示非空白符

\w \W

\w字母数字下划线 等同于 [a-zA-Z0-9_]

\W表示非数字字母下划线[^a-zA-Z0-9_]

\数字

我们如果在正则表达式中有括号,会产生一个分组

let reg = /(\d)\1/g // 等同于 \d前面匹配内容的引用
let str = '112234' // 11 22

()

优先匹配 产生分组

let reg = /((1)(2))(((3))(4))/
/*
	((1)(2))
 	(1)
  (2)
  (((3))(4))
  ((3))
  (3)
  (4)
*/

| 或

条件,不走前面就走后面

let reg = /((131)|(132))/

$num

在replace操作中,如果我们想要借助分组匹配到的结果,可以使用$num num就是组的序号。

let str = `
  1. 题目1
  2. 题目2
  3. 题目3
  4. 题目4
  5. 题目5
  6. 题目6
`

console.log(str.replace(/(题目\d)/g, "'$1'"))

贪婪和懒惰

如果在限制符后添加?会进入懒惰模式,然后会尽可能少的取匹配对应的字符。默认是贪婪模式,尽可能多的匹配字符。

零宽断言

(?:pattern)

可以代替|操作时,省略公共的字符

let str = `
	windows10
  windows11
`

let reg = /windows(?:10|11)/
// 匹配到的是windows10 和 windows11 相当于windows10|windows11

(?=pattern)

匹配后面的结尾的内容是否符合条件

let str = `
	windows10
  windows11
`
let reg = /windows(?=\d+)/
// 匹配到的是windows 匹配数字但是不进行保存

(?<=pattern)

和上面方向相反,先判断后匹配

let str = `
	windows10
  windows11
`
let reg = /(?<=windows)\d+/
// 匹配到的是后面的数字,匹配window但是不保存

(?!pattern)

和第一个都是后面判断,表示不符合条件

let str = `
	windows10
  windows11
  windowsxp
`
let reg = /windows(?!\d+)/
// 匹配到的是windows 是windowsxp的windows 前面两个比匹配

(?<!pattern)

和上面方向相反,先判断后匹配

let str = `
	windows1
  windows2
  ubuntu3
`
let reg = /(?<!windows)\d+/
// 匹配到的是后面的数字,但是是最后一个3,因为前面不能是windows

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

object not found

你的鼓励是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值