一、正则表达式-捕获exec
exec() 捕获片段 捕获不到返回null
- 例1:
var reg = /\d{3}/ //相邻三位数字
console.log(reg.exec('aaa123aa')) //['123']
- 例2:捕获年月日
var dataStr = 'time is from 2029-01-01 12:20:20 to 2029-11-01 12:20:20'
var reg = /\d{4}-\d{1,2}-\d{1,2}/
var newDataStr = reg.exec(dataStr)
console.log(newDataStr[0].split('-').join('/')) //2029/01/01
例2中正则表达式有懒惰特性,只能捕获到一个2029-01-01,捕获不到2029-11-01,要采取标识符
- 标识符 g i
g : 全局标识符
- 第二次捕获的时候会从第一次捕获结束的位置开始进行捕获
- 直到找不到内容,会返回一个null
- 然后下一次捕获的时候,会从字符串开始位置重新捕获
var dataStr = 'time is from 2029-01-01 12:20:20 to 2029-11-01 12:20:20'
var reg = /\d{4}-\d{1,2}-\d{1,2}/g
var newDataStr1 = reg.exec(dataStr) //先找到2029-01-01
var newDataStr2 = reg.exec(dataStr) //又找到2029-11-01
console.log(newDataStr1[0].split('-').join('/')) //2029/01/01
console.log(newDataStr2[0].split('-').join('/')) //2029/11/01
i : 忽略大小写
var myReg = /[a-z]/i //忽略大小写
console.log(myreg.test("aaa")) //true
console.log(myreg.test("AAA")) //true
二、正则表达式两大特性
- 懒惰
- 解决方法:使用全局标识符g
- 贪婪
var reg = /\d{1,4}/
console.log(reg.exec('aa1234bb')) //['1234']
- 出现1次数字就算是成功的,但是捕获贪到4位
- 非贪婪
var reg = /\d{1,4}?/
console.log(reg.exec("aa1234bb")) //1 只截取遇到的第一个符合规则的
?可搭配多种,就变得不贪婪,按照最小的满足
- *?
- +?
- ??
- {n,}?
- {n,m}?
var str = `<p class="active"><span></span></p>`
var myReg = /<p.*?>/
console.log(myReg.exec(str)) //<p class="active">
var myReg1 = /<p.*>/
console.log(myReg1.exec(str)) //<p class="active"><span></span></p>
三、正则与字符串方法
- 字符串.replace search match 例:replace
var str = 'adearfa'
var newstr = str.replace('a','*') //*dearfa
var newstr = str.replace(/a/g,'*') //*de*rf*
console.log(newstr)