ECMAScript-正则表达式的扩展

一、正则表达式的扩展[es6]

前提:

在ES5中有三个正则修饰符

  • i 忽略大小写
  • m 多行匹配
  • g 全局匹配
1. y修饰符 粘连修饰符
const str = 'aaa_aa_a'
const reg1 = /a+/g  // 每次匹配剩余的
const reg2 = /a+/y	// 剩余的第一个开始匹配,如果匹配不到,从头开始匹配

console.log(reg1.exec(str)) // aaa
console.log(reg2.exec(str)) // aaa

console.log(reg1.exec(str)) // aa
console.log(reg2.exec(str)) // null 剩余的第一个是_ 所以返回null

console.log(reg1.exec(str)) // a
console.log(reg2.exec(str)) // aaa 从头开始匹配
2. u修饰符 unicode 例如:\uD842\uDFB7
const str = '\uD842\uDFB7' // 表示一个字符 𠮷
console.log(/^\uD842/.test(str)) // 在es5中返回的是true 这个结果是不对的 因为在es5中把str识别成两个字符
console.log(/^\uD842/u.test(str)) // false 在es6中拓展了u 结果正确

// .除了换行符以外的任意单个字符
const str = '\uD842\uDFB7'
console.log(/^.$/.test(str)) // false 
console.log(/^.$/u.test(str)) // true

// 码点 {}
console.log(/\u{61}/.test('a')) // false
console.log(/\u{61}/u.test('a')) // true

// 超出范围的中文
console.log(/^𠮷{2}/.test('𠮷𠮷')) // false
console.log(/^𠮷{2}/u.test('𠮷𠮷')) // true
二、正则表达式的扩展【ES9】
1. doAll
const reg = /./
console.log(reg.test('6')) // true
console.log(reg.test('x')) // true
console.log(reg.test('\n')) // false
console.log(reg.test('\u{2028}')) // false

// 正则添加 /s
const reg = /./s
console.log(reg.test('6')) // true
console.log(reg.test('x')) // true
console.log(reg.test('\n')) // true
console.log(reg.test('\u{2028}')) // true
2. 具体组匹配
// 以前匹配一个日期,分别去除年、月、日
const date = /(\d{4})-(\d{2})-(\d{2})/.exec('2020-12-09')
console.log(date)
console.log(date[1])
console.log(date[2])
console.log(date[3])

// es9具体组匹配
const reg = /(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})/
const grops = reg.exec('2020-12-09').groups
const { year, month, day } = grops
console.log(year)
console.log(month)
console.log(day)

3. 先/后行断言
// JavaScript 语言的正则表达式,只支持先行断言,不支持后行断言,先行断言可以简单理解为"先遇到一个条件,再判断后面是否满足"
const str = 'ecmascript'
// 先行断言 es5
console.log(str.match(/ecma(?=script)/)) // 表示匹配一个以ecma开头且后面是script的字符串
// 后行断言 es9
console.log(str.match(/(?<=ecma)script/)) // 表示匹配一个以script结尾且前面必须是ecma的字符串
4. Unicode属性转义
// 引入了一种新的类的写法\p{…}和\P{…},允许正则表达式匹配符合Unicode某种属性的所有字符
// 可以使用\p{Number}来匹配所有的Unicode数字
const str = '®'
console.log(/\d/u.test(str))   // false

console.log(/\p{Number}/u.test(str)) // false

// 可以使用\p{Alphabetic}来匹配所有的Unicode单词字符
const str = 's'
console.log(/\p{Alphabetic}/u.test(str)) // true

// /P表示相反
console.log(/\P{Alphabetic}/u.test(str))  // false
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值