ES6之正則的擴充套件

wade3po發表於2019-05-09

正則建構函式一般都是兩個引數,ES6之前如果只有一個正規表示式的引數:

var reg = new RegExp(/a/g);

這時候是不允許再加一個引數:

var reg = new RegExp(/a/g, i);這是錯誤的,ES6是允許的,且第二個引數會覆蓋之前的模式。

ES6把字串使用正則的四個方法都變成呼叫正則物件RegExp上的方法,使用的時候是沒什麼區別,只是內部呼叫改變了,比如呼叫math方法是呼叫RegExp的prototype上面的方法。

新增了u修飾符,針對UTF-16的Unicode使用的。然後也增加了unicode的屬性,表示是否是標誌u。

新增了y修飾符,叫粘連sticky屬性。也是全域性匹配,解釋說後一次匹配都從上一次匹配成功的下一個位置開始,增加了新的修飾符,相應的也增加了sticky屬性。研究了一下,並沒有理解,希望有人能指點一下。

我們可以用source獲取正則的表示式,ES6新增了flags屬性獲取標誌符igmuy等。

ES2018對正則新增了一些,這邊就瞭解到ES6裡面:

s修飾符,是2018引入的,為了解決行終止符\n\r等,同時還引入了dotAll屬性返回布林值。

ES2018還引入了後行斷言,之前只支援先行斷言和先行否斷言。先行斷言的意思是隻有在某個之前的才匹配,先行否斷言是隻有不在某個之前才匹配。我覺得這個可以好好了解一下。

Unicode屬性類,\p{...}和\P{...},允許匹配符合Unicode某種屬性的所有字元。

具名匹配,採用圓括號提前的時候,每一組的含義不明確,ES2018引入了具名組匹配,便於閱讀和引用:

無具名:/(\d{4})-(\d{2})-(\d{2})/

具名:/(?\d{4})-(?\d{2})-(?\d{2})/

引用的時候跟json一樣,順序改變也不影響。

新增提案String.prototype.matchAll方法,一次性取出所有匹配,返回一個遍歷器。

其實簡單正則理解一下就夠用了,至於擴充套件和一些幾乎不用到的瞭解一下就夠了,真的需要使用的時候再去研究。

ES6之正則的擴充套件

相關文章