JS 正则表达式二

96 阅读2分钟

一、正则表达式-捕获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

二、正则表达式两大特性

  1. 懒惰
  • 解决方法:使用全局标识符g
  1. 贪婪
var reg = /\d{1,4}/
console.log(reg.exec('aa1234bb')) //['1234']
  • 出现1次数字就算是成功的,但是捕获贪到4位
  1. 非贪婪
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>

三、正则与字符串方法

  1. 字符串.replace search match 例:replace
var str = 'adearfa'
var newstr = str.replace('a','*')  //*dearfa
var newstr = str.replace(/a/g,'*') //*de*rf*
console.log(newstr)