小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
1. Regexp Dotall Flag
正则表达式dotAll模式
1.1 简介
正则表达式中,点 . 用于匹配任意的单个字符, 但它不能匹配四个字节的 UTF-16
字符,(这个问题可以由 u
修饰符解决), 以及行终止符。
行终止符代表一行的终结,如:U+000A
换行符 \n
、U+000D
回车符 \r
、U+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
点赞支持、手留余香、与有荣焉,动动你发财的小手哟,感谢各位大佬能留下您的足迹。
往期精彩推荐
Vue 虚拟 DOM 搞不懂?这篇文章帮你彻底搞定虚拟 DOM
Git 相关推荐
面试相关推荐
更多精彩详见:个人主页