阅读 200

ES系列总结正则相关(四)

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

1. Regexp Dotall Flag

正则表达式dotAll模式

1.1 简介

正则表达式中,点 . 用于匹配任意的单个字符, 但它不能匹配四个字节的 UTF-16 字符,(这个问题可以由 u 修饰符解决), 以及行终止符。

行终止符代表一行的终结,如:U+000A换行符 \nU+000D回车符 \rU+2028行分隔符、U+2029段落分隔符;

/name.alice/.test('name\nalice') // false
复制代码

上述代码中, 点.不能匹配 \n换行符, 所以返回false。ES2018中引入s修饰符,让 . 能够匹配任意的单个字符。这个模式就被称为dotAll模式;

/name.alice/s.test('name\nalice') // true
复制代码

2. Regexp Named Groups

正则表达式具名捕获组

2.1 简介

ES2018前,正则表达式可以通过()进行组匹配

const Reg_Day = /(\d{4})-(\d{2})-(\d{2})/
const matchList = Reg_Day.exec('2021-05-27')
const year = matchList[1] // '2021'
const month = matchList[2] // '05'
const day = matchList[3] // '27'
复制代码

组匹配的一个弊端是:不清楚每一组匹配的含义,只能通过索引来固定取值。

ES2018后,引入具名捕获组,允许为每一个组匹配指定一个名字。

let users = `name: alice, age: 19
name: sam, age: 23`
 
let regexpNames = /name: (?<name>.+), age: (?<age>.+)/gm
let match = regexpNames.exec(users)
 
do {
  console.log(`Hello ${match.groups.name} ${match.groups.age}`)
} while ((match = regexpNames.exec(users)) !== null)
 
// Hello alice 19
// Hello sam 23
复制代码

3. Regexp Unicode Prope

正则表达式 Unicode 转义

3.1 简介

ES2018前,我们通常用 \d 匹配任何数字, \s 匹配任何不为空格的字符。

ES2018后,新增了 \p{} 匹配所有 Unicode 字符, 它的否定为 \P{}

/^\p{ASCII_Hex_Digit}$/u.test('0123456789ABCDEF') // true
/^\p{ASCII_Hex_Digit}$/u.test('abc') // false
复制代码

上述代码的 ASCII_Hex_Digit 是一个布尔类型的属性,用于检查字符串是否只包含有效的十六进制数字

还有许多其他的类似属性如 Uppercase, Lowercase, White_Space, Alphabetic, Emoji

/^\p{Lowercase}$/u.test('h') // true
/^\p{Uppercase}$/u.test('H') // true
/^\p{Emoji}+$/u.test('H')   // false
复制代码

点赞支持、手留余香、与有荣焉,动动你发财的小手哟,感谢各位大佬能留下您的足迹。

11.png

往期精彩推荐

【建议点赞收藏】ES系列总结(三)

【建议点赞收藏】ES系列总结(二)

【建议点赞收藏】ES系列总结(一)

前端常用的几种加密方法

canvas 爬坑路【方法篇】

不懂 seo 优化?一篇文章帮你了解如何去做 seo 优化

canvas 爬坑路【属性篇】

【实战篇】微信小程序开发指南和优化实践

聊一聊移动端适配

前端性能优化实战

聊聊让人头疼的正则表达式

获取文件blob流地址实现下载功能

Vue 虚拟 DOM 搞不懂?这篇文章帮你彻底搞定虚拟 DOM

Git 相关推荐

通俗易懂的 Git 入门

git 实现自动推送

面试相关推荐

前端万字面经——基础篇

前端万字面积——进阶篇

更多精彩详见:个人主页

文章分类
前端