js正则表达式全解

"本文深入探讨了正则表达式的方法,包括test()和exec(),以及如何通过它们捕获和匹配字符串。此外,还介绍了正则限定符如w、d等,以及正向和负向预查的概念,帮助理解预查在匹配中的作用。文章通过实例详细解析了正则表达式的分组、贪婪与非贪婪匹配,并列举了与正则配合的字符串方法如search()、replace()和match()。"
摘要由CSDN通过智能技术生成

1.正则表达式的两个方法

1.test()
2.exec()

let str = '123'
let  reg = /\d/
reg.exec(str)  
//["1", index: 0, input: "123", groups: undefined]
//exec()捕获一个符合规则的结果
// 该方法只会匹配一次结果,如果还需要其他的符合结果的
// 再次捕获 使用 reg.exec(str)
// 例如:
reg.exec(str) //["1", index: 0, input: "123", groups: undefined]
reg.exec(str) //["2", index: 1, input: "123", groups: undefined]
reg.exec(str) //["3", index: 2, input: "123", groups: undefined]
//直到结果为 null




//test()方法检测一个字符串是否符合规则 返回true或者false
let reg = /\w/
let str = '!#$_'
reg.test(str) //true

2.正则表达式的限定符

\w :表示数字,字母,下划线
\W:与\w结果取反,即表示 非数字,字母,下划线

\d:表示任意一个数字
\D:表示 \d的取反结果

\s:一个空格
\S:\s的结果取反

. : 表示任意一个字符

^ : 表示以 … 开头
$ : 表示以 … 结尾

+ : 一个或多个
? : 0 个或 1个
* : 0个或多个

let reg = /^\d$/
let str = 55
reg.test(str) //false

3.正则的分组

1.( ) : 表示一个整体

/(abcd){2}/
// 表示只有abcd同时出现两次才符合要求
//在exec捕获的时候,结果内会出现分组的结果
//(2) ["abcdabcd", "abcd", index: 2, input: "eeabcdabcddd", groups: undefined]

2.(?:): 会分组,也会捕获结果 但不显示分组的内容

reg = /\d+(?:\s+\d+)/
str = '123   123'
reg.exec(str)
//返回的结果:
//["123   123", index: 0, input: "123   123", groups: undefined]
//如上并没有返回括号内分组的内容

3. | :表示或的意思

let reg = /(abc|def)/
let str = 'abc'
let str2 = 'def'
reg.test(str) //true
reg.test(str2) //true
//解释:首先他在一个括号里,那就表示它是一个整体
// 然后因为有 | ,那么结果可以是 abc ,也可以是def


let reg = /ab(c|d)ef/
let str = 'abdef'
let str2 = 'abcef'
reg.test(str) //true
reg.test(str2) //true
//这样 c和d就是一个整体了,在他们之间选一个



let reg = /abc|def/
let str = 'abc'
let str2 = 'def'
reg.test(str) //true
reg.test(str2) //true
// |将这个分成了两部分
//如果|没有在括号里,那它就将他上一个整体分为左右两部分
// /(abc|def)efg/ 如这个:可以是abcefg 亦可以是 degefg
let reg = /(abc|def)efg/
let str = 'abcefg'
let str2 = 'defefg'
reg.test(str)  //true
reg.test(str2) //true
//在这个例子里 | 就是把它的上一级 也就是()括号里的内容
//分成了 两部分

4. [ ]的使用

//   /[abcdefg]/ 这里面的任意一个都可以
//  /^[abcd]/   以这里面的任意一个开头都可以
//  /[^abcd]/   不能有这里面的任意一个
//   /^[^abcd]/   只要不是以abcd任意一个开头的,就都可以  

5.正则表达式的预查

----正向预查,是以查找的内容的后边为参考标准的—

5.1正向肯定预查
(?=) 他返回的结果中是没有(?= …) 里的内容的

let reg = /es(?=2015|2016)/g
let str = 'es2018es2017es2016es2015'
reg.exec(str)
reg.exec(str)
//第一个返回结果:
//["es", index: 12, input: "es2018es2017es2016", groups: undefined]

//第二个返回的结果:
//["es", index: 18, input: "es2018es2017es2016es2015", groups: undefined]

//这个正则的意义是:要返回一个es字符串, 什么样的es字符串? 后边有2015或者2016
// 字符串跟在后面的es

5.2正向否定预查
(?!)

let reg = /es(?!2015|2016)/g
let str = 'es2015es2018'
reg.exec(str)
//["es", index: 6, input: "es2015es2018", groups: undefined]
//返回一个不在2015或者2016前边的es

–负向预查是以查询的内容的前边为标准的–
–也就是说(?<=)是写在前边的—

5.3负向肯定预查
(?<=)

let reg = /(?<=2015|2016)es/
let str = '2015es2017es'
reg.exec(str)
//["es", index: 4, input: "2015es2017es", groups: undefined]
//查询在2015或者2016后边的es字符串

5.4负向否定预查
(?<!)

let reg = /(?<!2015|2016)es/
let str = '2015es2017es'
reg.exec(str)
//["es", index: 10, input: "2015es2017es", groups: undefined]
//查询不在2015或者2016后边的es

6.正则的贪婪和非贪婪匹配

解释:

贪婪是指:当给定一个符号限定符的时候,它会尽可能多的去捕获内容

非贪婪:按照最小的数量来捕获,使用方法就是在限定符号后边加一个 ? 就可以

例如:
/\d+?/ 本来在没有?的情况下就是尽可能多去匹配数字,+:1个或多个
加上了?后就只匹配1个
同理:
/\d*?/ 0个
/\d??/ 0个

7.标识符

g:表示全局匹配
i:表示忽略大小写
y:在全局匹配下,每次都以第一个为开头

8.与正则合作的字符串方法

search() 返回索引
replace() 返回替换的内容
match() 返回一个数组 里面是所有满足条件的内容
split() 返回一个数组,把正则匹配到的内容,以该内容为标准裁掉

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值