正则表达式

一、正则表达式创建

// 1.字面量创建,//里面的默认是字符串,不能传入变量
let str = '123adfj3425dda23'
//let reg = /\d+/g
//let arr = str.match(reg)
//console.log(arr) // 123,3425, 23
// 2.用构造函数创建正则,\需要用\来转义,并且里面可以传入变量
//let reg2 = new RegExp('\\d+', 'g')
let a = '123'
let reg2 = new RegExp(a, 'g') // 123
let arr = str.match(reg2)// 123 3425 23
console.log(arr)

二、正则方法

// 正则对象匹配的方法 1.test 2.exec
let str = 'dfs123kdfa534'
let reg = /\d+/g
console.log(reg.test(str)) 
// 寻找str里是否有符合reg正则的部分,有就true,否则false
console.log(reg.exec(str)) 
// 返回继上一次reg匹配之后,再次符合reg的部分,跟index有关,记录游标
// 字符串方法1. match 2. replace 3. split 4. search 都是返回鑫数组,不改变原数组
let newStr = 'djd432dfal53'
let newReg = /\d/g
console.log(newStr.match(newReg)) 
// 如果有g全局返回符合该正则的部分,否则返回第一次符合正则的数据及相关信息
console.log(newStr.replace(newReg, '*')) 
// 把符合正则的部分永指定字符来代替
let myStr = newStr.replace(newReg, function (arg){
	//console.log(arg) 
	// 第一个参数是符合正则的每一项,第二个参数指代分组里面的内容,第三个参数表示index
	return '*'
})
console.log(myStr)
let splitReg = /\d+/g
let arr = newStr.split(splitReg) 
// 根据正则要求分割数组,如果最后一个值也是符合要求的,再追加''空数组
console.log(arr)
console.log(newStr.search(splitReg)) 
// 返回第一次出现符合正则的位置,是否有g没有关系,如果没有返回-1

三、字符相关元字符

//字符相关元字符
// \w \W \d \D \s \S .
// \w 表示数字, 字母, 下划线
let str = '_'
let reg = /\w/g
console.log(reg.test(str)) // true
// \W 非数字,字母,下划线
let Wstr = '!~'
let WReg = /\W/g
console.log(WReg.test(Wstr)) // true
// \d 表示数字
// \D 表示非数字
// \s 表示空格
// \S 表示非空格
// . 表示非\n \r \u2028 \u2029 不是换行,不是回车 不是行和段落结束符

四、数量元字符

// 字数相关元字符
// {} * + ?
// * {0, }
// + {1,}
// ? {0, 1}
let str = 'dsfadsrrrrreeww'
let reg = /\w{2,4}?/g  // 不加问好是贪婪匹配,加了问好是非贪婪匹配
console.log(str.match(reg)) 

五、位置元字符

// 位置元字符
// ^ $ \b \B 
// ^ 表示以什么开头,只有一个^表示字符串首位
// $ 表示以什么结尾,只有一个$表示字符串末尾
// \b 表示边界,非\w 不是字符,数字和_,
// \B 表示非边界
let str = '123,asdj3dfs'
let reg = /^\d+/g 
console.log(str.match(reg)) // 123 在整个字符串里面的开头
let BReg = /\b(\d+)/g 
console.log(str.match(BReg)) // 123

六、小括号元字符

// 括号元字符
// 1.反向应用
let str = 'aabbbssejjff'
let reg = /(\w)\1(\w)\2/g
console.log(str.match(reg)) 
// \n表示第几个括号里面的内容,\1表示跟第一个括号里的内容一样
// 2.分组
let newStr = '2020-01_02'
let newReg = /\d+(-|_)(\d+)(-|_)(\d+)/g
console.log(newStr.match(newReg))
console.log(RegExp.$1) // -
console.log(RegExp.$2) // 01
console.log(RegExp.$3) // _
// 3.提取值
let myStr = '2020-12-31'
let myReg = /(\d{4})-(\d{2})-(\d{2})/g
// 4.替换
let Rstr = '2020-12-30'
let Rreg = /(\d{4})-(\d{2})-(\d{2})/g
let newRstr = Rstr.replace(Rreg, function (arg, year, month, day){
	return month + '/' + day + '/' + year
})
console.log(newRstr) // 10/30/2020

七、中括号元字符,字符集合

// 中括号,字符集合
// 自带|功能
// \d => [0-9] 
// \w [0-9a-zA-z_]
let str = 'djfiwk123i,~'
let reg = /[0-9a-zA-Z_]+/g
console.log(str.match(reg)) // djfiw..

let str = 'dfe234sf'
let reg = /[^0-9]+/g // 中括号里面的^表示非
console.log(str.match(reg))

八、匹配模式
g, i, y, s, m

  • g 全局匹配
  • i 忽略大小写
  • y 匹配的必须是连续的
  • m 多行匹配
  • s 让 ‘.’ 可以匹配到换行,回车等

九、命名分组&零宽断言

// 命名分组
let str = '2020-12-12'
let reg = /(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})/
console.log(str.match(reg))

// 正向零宽断言 匹配到指定内容,但是不包含零宽断言部分
// 肯定
let str2 = 'iphone4iphone5iphone6iphonenumber'
let reg2 = /iphone(?=\d+)/g
//let newStr2 = str2.replace(reg2, '苹果')
//console.log(newStr2) // 苹果4 苹果5 .。。
// 否定
let reg3 = /iphone(?!\d+)/g
let newStr3 = str2.replace(reg3, '苹果') // 苹果number
console.log(newStr3)

// 负向零宽断言
// 肯定
let str4 = '10px20pxnumpx'
let reg4 = /(?<=\d+)px/g
let newStr4 = str4.replace(reg4, '像素')
console.log(newStr4) // 10像素
// 否定
let reg5 = /(?<!\d+)px/g
let newStr5 = str4.replace(reg5, '像素')
console.log(newStr5) // number像素
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值