ES9(五) —— Unicode Property Escapes

目錄

  • Unicode Property
  • Unicode Script
  • Unicode Block
  • ES6-ES10學習版圖

瞭解這個新的知識點,須要對文本的編碼很是熟悉,否則意識不到這個功能的意義。對於文本的編碼須要瞭解兩個概念:字符編碼文件編碼html

  • 字符編碼包括 ASCIIUnicode
  • 文件編碼包括 UTF-8GBK等。

字符編碼和文件編碼的關係能夠用一句話來歸納:文件編碼和字符編碼沒有關係,也就是說即便指定了文件編碼,字符變也能夠靈活選擇而不受任何限制。正則表達式

根據 Unicode 規範,每個 Unicode 字符除了有惟一的碼點,還具備其它屬性:express

  • Unicode Property
  • Unicode Script
  • Unicode Block

這些通常用在正則裏面。學習

Unicode Property

它按照字符的功能對字符進行分類,一個字符只能屬於一個 Unicode Property。也就是說 Property 並不關心字符所屬的語言,只關心字符的功能。編碼

能夠將Unicode property 理解爲字符組,將小寫 p 改爲大寫,就是該字符組的排除型字符組。想一想看 \\d 匹配 0-9 這個字符組,而 \\D 匹配 0-9 之外的字符組。spa

let input = 'abcdAeCd中國'
console.log(input.match(/\p{L}/ug))
// ["a", "b", "c", "d", "A", "e", "C", "d", "中", "國"]

這段代碼的含義是在輸入中匹配全部的字符(不限語言),這裏使用的是 Unicode Property:{L},這個屬性的含義是任何語言的任何字母。它有點等同於code

let input = 'abcdAeCd中國'
console.log(input.match(/./sg))
  • {Ll} [任何具備大寫字母的小寫字母]
  • {N} [任何語言下的數字]

更多的 Unicode Property 請查閱 官網htm

Unicode Script

按照字符所屬的書寫系統來劃分字符,它通常對應某種語言。好比 \\p{Script=Greek} 表示希臘語,\\p{Script=Han} 表示漢語。blog

匹配下列字符串中的中文ip

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學習版圖

相關文章
相關標籤/搜索