ES6入門之正則的擴充套件

2021-09-24 06:29:20 字數 3608 閱讀 3254

引數為字串, 那麼第二個引數表示正規表示式的修飾符,如下:

var regex = new regexp('xyz', 'i')  

// 等價於

var regex = /xyz/i

複製**

引數為乙個正規表示式,這時返回乙個原有正規表示式的拷貝。如下:

var regex = new regexp(/xyz/i)

// 等價於

var regex = /xyz/i

複製**

es6中改變了這種行文。如果regexp建構函式第乙個引數是正則物件,那第二個引數可以指定修飾符,並且返回的正規表示式會忽略原有正規表示式的修飾符,只使用新指定的修飾符。 如下:

new regexp(/abc/ig, 'i').flags

// 原有的ig 被 i 覆蓋

複製**

字串物件共有4個方法,可以使用正規表示式: match()、 replace()、search() 和 split()。在es6中 全部呼叫regexp的例項方法,全部定義在regexp物件上。如下:

string.prototype.match 呼叫 regexp.prototype[symbol.match]

string.prototype.replace 呼叫 regexp.prototype[symbol.replace]

string.prototype.search 呼叫 regexp.prototype[symbol.search]

string.prototype.split 呼叫 regexp.prototype[symbol.split

複製**

es6 對正規表示式新增了 u 修飾符,用來正確處理大於\uffff的unicode字元。如下:

/^\ud83d/u.test('\ud83d\udc2a') // false

/^\ud83d/.test('\ud83d\udc2a') // true

// 如上**因為在es5中 不支援四個位元組的 utf-16編碼,會將為識別為兩個字元 導致 第二行為true

但是加了 u 修飾符後,es6將為識別為乙個字元,所以第一行為flase

複製**

正則例項物件新增 unicode 屬性,用來判斷表示是否設定了u修飾符,如下:

const r1 = /hello/;

const r2 = /hello/u;

r1.unicode // false

r2.unicode // true

複製**

var s = 'aaa_aa_a';

var r1 = /a+/g;

var r2 = /a+/y;

r1.exec(s) // ["aaa"]

r2.exec(s) // ["aaa"]

r1.exec(s) // ["aa"]

r2.exec(s) // null

// 第一次執行後 為 _aa_a g 只要剩餘位置存在即可匹配,返回 aa

// y 則是從上一次結果後的第乙個位置開始,因為是_ 所以返回null

複製**

與y修飾符相匹配,es6 的正則例項物件多了sticky屬性,表示是否設定了y修飾符 如下:

var r = /hello\d/y;

r.sticky // true

複製**

es6 為正規表示式新增了flags屬性,會返回正規表示式的修飾符。

// es5 的 source 屬性

// 返回正規表示式的正文

/abc/ig.source

// "abc"

// es6 的 flags 屬性

// 返回正規表示式的修飾符

/abc/ig.flags

// 'gi'

複製**

匹配的是任意單個字元,用來匹配任意單個字元,如下:

/foo.bar/s.test('foo\nbar') // true

複製**

es2018 引入了一種新的類的寫法\p和\p,允許正規表示式匹配符合 unicode 某種屬性的所有字元。

const regexgreeksymbol = /\p/u;

regexgreeksymbol.test('π') // true

複製**

正常多個匹配 可能用圓括號包起,如下:

const re_date = /(\d)-(\d)-(\d)/;

const matchobj = re_date.exec('1999-12-31');

const year = matchobj[1]; // 1999

const month = matchobj[2]; // 12

const day = matchobj[3]; // 31

複製**

但是以上的寫法不容易看懂,理解較為困難,而且只能用數字序號,另外如果陣列順序變了,還需要修改引用的序號。所以就有了具名組匹配。允許為每乙個組匹配指定乙個名字,既便於閱讀**,又便於引用。即使組的順序變了,葉不用去更改匹配後的處理**。如下:

const re_date = /(?\d)-(?\d)-(?\d)/;

const matchobj = re_date.exec('1999-12-31');

const year = matchobj.groups.year; // 1999

const month = matchobj.groups.month; // 12

const day = matchobj.groups.day; // 31

// 格式: 「具名組匹配」在圓括號內部,模式的頭部新增「問號 + 尖括號 + 組名」(?)

複製**

如果乙個正規表示式在乙個字串中有多個匹配,現在使用的是 g 修飾符 或者 y 修飾符 迴圈 取出。現在有了新的提案。就是用 string.prototype.matchall 一次性取出,但是它返回的不是乙個陣列,而是乙個遍歷器。然後可以用 for ... of 取出。

es6入門系列

es6入門之let、cont

es6入門之變數的解構賦值

es6入門之字串的擴充套件

git教程

前端git基礎教程

ES6入門之正則的擴充套件

引數為字串,那麼第二個引數表示正規表示式的修飾符,如下 var regex new regexp xyz i 等價於 var regex xyz i 複製 引數為乙個正規表示式,這時返回乙個原有正規表示式的拷貝。如下 var regex new regexp xyz i 等價於 var regex ...

ES6入門 正則的擴充套件

1 regexp建構函式 在es5中,regexp建構函式的引數有兩種情況。第一種情況是引數是字串,這時第二個引數表示正規表示式的修飾符 第二種情況是,引數是乙個正規表示式,這時會返回乙個原有正規表示式的拷貝。但是,es5不允許此時使用第二個引數,新增修飾符,否則會報錯 var regex new ...

ES6 正則的擴充套件

一,regexp 建構函式 es5中,regexp建構函式的引數有兩種情況。1,引數是字串,第二個引數表示正規表示式的修飾符 flag 2,引數是乙個正規表示式,返回乙個原有正規表示式的拷貝。es6中,如果regexp建構函式第乙個引數是乙個正則物件,那麼可以使用第二個引數指定修飾符。而且,返回的正...