正則的擴充套件

正則的擴充套件

正則的擴充套件

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