正則的擴充套件
RegExp 建構函式
第一種情況是,引數是字串,這時第二個引數表示正則表示式的修飾符
第二種情況是,引數是一個正則表示式,這時會返回一個原有正則表示式的複製
ES5 不允許此時使用第二個引數新增修飾符,否則會報錯
ES6 改變了這種行為。如果RegExp建構函式第一個引數是一個正則物件,那麼可以使用第二個引數指定修飾符
字串的正則方法
字串物件共有 4 個方法,可以使用正則表示式:match()、replace()、search()和split()
u 修飾符
ES6 對正則表示式添加了u修飾符,含義為“Unicode 模式”,用來正確處理大於\uFFFF的 Unicode 字元
點(。)字元在正則表示式中,含義是除了換行符以外的任意單個字元
對於碼點大於0xFFFF的 Unicode 字元,點字元不能識別,必須加上u修飾符
ES6 新增了使用大括號表示 Unicode 字元,這種表示法在正則表示式中必須加上u修飾符,才能識別當中的大括號,否則會被解讀為量詞
使用u修飾符後,所有量詞都會正確識別碼點大於0xFFFF的 Unicode 字元
u修飾符也影響到預定義模式,能否正確識別碼點大於0xFFFF的 Unicode 字元
RegExp。prototype。unicode 屬性
正則例項物件新增unicode屬性,表示是否設定了u修飾符
y 修飾符
ES6 還為正則表示式添加了y修飾符,叫做“粘連”(sticky)修飾符
RegExp。prototype。sticky 屬性
與y修飾符相匹配,ES6 的正則例項物件多了sticky屬性,表示是否設定了y修飾符
RegExp。prototype。flags 屬性
ES6 為正則表示式新增了flags屬性,會返回正則表示式的修飾符
s 修飾符:dotAll 模式
正則表示式中,點(。)是一個特殊字元,代表任意的單個字元,但是有兩個例外
一個是四個位元組的 UTF-16 字元,這個可以用u修飾符解決;另一個是行終止符
這被稱為dotAll模式,即點(dot)代表一切字元。所以,正則表示式還引入了一個dotAll屬性,返回一個布林值,表示該正則表示式是否處在dotAll模式
後行斷言
“先行斷言”指的是,x只有在y前面才匹配,必須寫成/x(?=y)/
“後行斷言”正好與“先行斷言”相反,x只有在y後面才匹配,必須寫成/(?<=y)x/
Unicode 屬性類
ES2018 引入了一種新的類的寫法\p{。。。}和\P{。。。},允許正則表示式匹配符合 Unicode 某種屬性的所有字元
具名組匹配
正則表示式使用圓括號進行組匹配
有了具名組匹配以後,可以使用解構賦值直接從匹配結果上為變數賦值
如果要在正則表示式內部引用某個“具名組匹配”,可以使用\k<組名>的寫法
String。prototype。matchAll
如果一個正則表示式在字串裡面有多個匹配,現在一般使用g修飾符或y修飾符,在迴圈裡面逐一取出
8