目录
- Unicode Property
- Unicode Script
- Unicode Block
- ES6-ES10 学习幅员
理解这个新的知识点,须要对文本的编码十分相熟,不然意识不到这个性能的意义。对于文本的编码须要理解两个概念:字符编码 和文件编码。
- 字符编码包含
ASCII
和Unicode
- 文件编码包含
UTF-8
、GBK
等。
字符编码和文件编码的关系能够用一句话来概括:文件编码和字符编码没有关系,也就是说即便指定了文件编码,字符变也能够灵便抉择而不受任何限度。
依据 Unicode
标准,每一个 Unicode
字符除了有惟一的码点,还具备其它属性:
Unicode Property
Unicode Script
Unicode Block
这些个别用在正则外面。
Unicode Property
它依照字符的性能对字符进行分类,一个字符只能属于一个 Unicode Property
。也就是说 Property
并不关怀字符所属的语言,只关怀字符的性能。
能够将Unicode property
了解为字符组,将小写 p
改成大写,就是该字符组的排除型字符组。想想看 \\d
匹配 0-9
这个字符组,而 \\D
匹配 0-9
以外的字符组。
let input = 'abcdAeCd 中国'
console.log(input.match(/\p{L}/ug))
// ["a", "b", "c", "d", "A", "e", "C", "d", "中", "国"]
这段代码的含意是在输出中匹配所有的字符(不限语言),这里应用的是 Unicode Property:{L}
,这个属性的含意是任何语言的任何字母。它有点等同于
let input = 'abcdAeCd 中国'
console.log(input.match(/./sg))
{Ll}
[任何具备大写字母的小写字母]{N}
[任何语言下的数字]
更多的 Unicode Property
请查阅 官网
Unicode Script
依照字符所属的书写零碎来划分字符,它个别对应某种语言。比方 \\p{Script=Greek}
示意希腊语,\\p{Script=Han}
示意汉语。
匹配下列字符串中的中文
let input = `I'm chinese! 我是中国人 `
console.log(input.match(/\p{Script=Han}+/u))
// ["我是中国人", index: 12, input: "I'm chinese! 我是中国人 ", groups: undefined]
如果不实用这个新性能点,在 ES9
之前大略只能这样做:
let input = `I'm chinese! 我是中国人 `
console.log(input.match(/[\u4e00-\u9fa5]+/))
// ["我是中国人", index: 12, input: "I'm chinese! 我是中国人 ", groups: undefined]
尽管不同的写法看上去后果一样,然而时光飞逝,
Unicode
在 2017 年 6 月公布了10.0.0
版本。在这 20 年间,Unicode
增加了许多汉字。比方Unicode 8.0
增加的 109 号化学元素「鿏(⿰⻐麦)」,其码点是9FCF
,不在这个正则表达式范畴中。而如果咱们冀望程序里的/[\\u4e00-\\u9fa5]/
能够与时俱进匹配最新的Unicode
规范,显然是不事实的事件。当初只须要在Unicode Scripts
找到对应的名称即可,而不须要本人去计算所有对应语言字符的的Unicode
范畴。
Unicode Block
将 Unicode
字符依照编码区间进行划分,所以每一个字符都只属于一个 Unicode Block
,举例说明:
\\p{InBasic_Latin}: U+0000–U+007F
\\p{InLatin-1_Supplement}: U+0080–U+00FF
\\p{InLatin_Extended-A}: U+0100–U+017F
\\p{InLatin_Extended-B}: U+0180–U+024F
目前 JavaScript RegExp
还不反对 Unicode Block
ES6-ES10 学习幅员