关于es2018中正则表达的命名捕获

es6中的命名捕获


  1. (?<别名>) 在正则表达式中以这样的形势就能给子表达式取一个别名,以获得更好的代码可读性

现在有一个字符串,’2018-09-06’,我需要分别获取他的年月日,以前的做法就是:

let str =  '2018-09-06'
let reg = /(\d{4})-(\d{2})-(\d{2})/
let arr = str.match(reg)
let [year, month, day] = [arr[1], arr[2], arr[3]]

但是现在新版的es中提供了一个更加便于理解的方法,现在很多浏览器还不支持,新版谷歌可用

let str =  '2018-09-06'
let reg1 = /(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})/

let arr = str.match(reg1)
let {year, month, day} = arr.groups
命名捕获在replace中的使用

之前的做法

let str =  '2018-09-06'
let reg = /(\d{4})-(\d{2})-(\d{2})/
let str1 = str.replace(reg,'$2/$3/$1');

console.log(str1) // 09/06/2018

es2018的做法

let str =  '2018-09-06'
let reg = /(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})/
let newstr = str.replace(reg, '$<month>/$<day>/$<year>')

console.log(newstr) // 09/06/2018

当然replace的回掉函数方式也是可以实现的

let str = '2018-09-06';
let reg = /(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})/
let str2 = str.replace(reg,(...args)=>{
    let {year,month,day} = args[args.length - 1]
    return `${year}/${month}/${day}`;
})
console.log(str2) // 2018/09/06
反向引用
  1. 以前反向引用子表达式的做法如下
 let str2 = 'welcome-welcome-welcame'
let reg2 = /(welcome)(-)\1\2/

console.log(str2.match(reg2)) // welcome-welcome-
  1. 新es标准里可以通过命名捕获来反向引用, 只需要 \k<别名>就好了
let str2 = 'welcome-welcome-welcame'
let reg2 = /(?<wel>welcome)-\k<wel>-/

console.log(str2.match(reg2)) // welcome-welcome-
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值