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() 返回一个数组,把正则匹配到的内容,以该内容为标准裁掉