ES6-正则的扩展-Unicode 属性类

目前有一个提案,引入了一种新的类的写法 \p{...} 和\P{...},允许正则表达式匹配符合 Unicode 某种属性的所有字符。

 

const regexGreekSymbol = /\p{Script=Greek}/u;
regexGreekSymbol.test('π') // true

上面代码中,\p{Script=Greek} 指定匹配一个希腊字母,所以匹配 π 成功
Unicode 属性累要指定属性名和属性值。

 

 

\p{UnicodePropertyName=UnicodePropertyValue}

对于某些属性,可以只写属性名。

\p{UnicodePropertyName}

\P{...} 是 \p{...} 的反向匹配,即匹配不满足条件的字符。

 

这两种类只对 Unicode 有效,所以使用的时候一定要加上 u 修饰符。如果不加 u 修饰符,正则表达式使用 \p 和 \P 会报错,ECMAScript 预留了这两个类。

由于 Unicode 的各种属性非常多,所以这种新的类的表达能力非常强。

 

const regex = /^\p{Decimal_Number}+$/u;
regex.test('123456789') // true

上面代码中,属性类指定匹配所有十进制字符,可以看到各种字型的十进制字符都会匹配成功。

 

 

 

\p{Number}甚至能匹配罗马数字。

 

// 匹配所有数字
const regex = /^\p{Number}+$/u;
regex.test('²³¹¼½¾') // true
regex.test('㉛㉜㉝') // true
regex.test('ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩⅪⅫ') // true

下面是其他一些例子。

 

 

// 匹配各种文字的所有字母,等同于 Unicode 版的 \w
[\p{Alphabetic}\p{Mark}\p{Decimal_Number}\p{Connector_Punctuation}\p{Join_Control}]

// 匹配各种文字的所有非字母的字符,等同于 Unicode 版的 \W
[^\p{Alphabetic}\p{Mark}\p{Decimal_Number}\p{Connector_Punctuation}\p{Join_Control}]

// 匹配所有的箭头字符
const regexArrows = /^\p{Block=Arrows}+$/u;
regexArrows.test('←↑→↓↔↕↖↗↘↙⇏⇐⇑⇒⇓⇔⇕⇖⇗⇘⇙⇧⇩') // true
具名组匹配

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值