正则匹配汉字


`/\p{sc=Han}/gu`
// ES 2018 已经支持

匹配繁体字?
匹配 CJK?// /\p{sc=Han}|\p{sc=Katakana}|\p{sc=Hiragana}|\p{sc=Hangul}/gu


Unicode Property 的记法类似『\p{L}』、『\p{Lo}』,它按照字符的功能分类 Unicode 字符,而不关心字符属于哪种语言,每个Unicode字符只能属于唯一 Unicode Property。『\p{Z}』表示任意的空白字符或不可见的分隔符;『\p{P}』表示任何标点字符,等等。遇到中英文混排、全角半角同时出现的情况,我们就可以用『\p{Z}』匹配所有的空白字符(而不用关心空格到底是全角空格还是半角空格),用『\p{P}』匹配所有的标点字符(而不用关心逗号到底是中文逗号还是英文逗号),而不用费心细节。

Unicode Block 则不同于 Unicode Property,它按照编码区间划分 Unicode 字符,每个 Unicode Block 中的字符编码都是落在同一个连续区间的。因为 Unicode 编码表中,某种语言的字符通常是落在同一区间的,所以它也可以粗略表示某类语言的字符,比如 \p{InHebrew} 表示希伯莱语字符,『\p{InCJK_Compatibility}』表示兼容CJK(汉语、韩语、日本语)的字符。

Unicode Script 按照字符所属的书写系统来划分 Unicode 字符,比如 \p{Greek} 表示希腊语字符, \p{Han} 表示汉语(中文字符)。它的写法类似 Unicode Block,只是名字的开头没有"Is"或者"In"。\p{Han} 属性类能匹配到的汉字有8万多个,而实际上我们经常在代码里用的是 4E00..9FD5 这个区间只有两万多个汉字,即便这样,也比常用汉字多多了。