所謂正則表達式,又稱規則表達式。(英語:Regular Expression,在代碼中常簡寫爲regex、regexp或RE),計算機科學的一個概念。正則表達式一般被用來檢索、替換那些符合某個模式(規則)的文本。在以前使用基於Jquery庫開發項目的時候,用的正則表達式最多的就是一些輸入框的檢驗,好比檢驗電話號碼或者郵箱的格式是否合適等。正則表達式
在ES5中,RegExp構造函數的參數有兩種狀況:ide
1、參數是字符串,這是第二個參數標識正則表達式的修飾符(flag)。函數
var regex = new RegExp('xyz', 'i');編碼
// 等價於 var regex = /xyz/i;spa
2、參數是一個正則表達式,這時會返回一個原有正則表達式的拷貝。code
var regex = new RegExp( /xyz/i) ;regexp
// 等價於 var regex = /xyz/i;blog
可是ES5不容許此時使用第二個參數添加修飾符,即第一種方式,不然就會報錯。ES6改變了這種行爲,若是RegExp構造函數第一個參數是正則表達式,那麼可使用第二個參數指定修飾符。並且,返回的正則表達式會忽略原有正則表達式的修飾符,只有從新指定。下面爲你們介紹一下ES6對正則表達式新增的各類修飾符:開發
一、u修飾符字符串
ES6對正則表達式添加u修飾符,含義爲「Unicode模式」,用來正確處理大於\uFFFF的Unicode字符,也就是說能夠正確處理4個字節的UTF-16編碼。
二、y修飾符
y修飾符又叫粘連,與g修飾符相似,都是從上一次匹配成功的下一個位置開始,只不過y修飾符會確保匹配必須從剩餘的第一個位置開始。
三、s修飾符
s修飾符就是doAll模式,字符串中全部的字符都匹配,包括換行符(\n)、回車符(\r)等。
介紹完各類修飾符以後,爲你們重點介紹具名組匹配,簡而言之就是正則表達式使用圓括號進行組匹配,先看下面一段代碼
1 const RE_DATA = /(\d{4})-(\d{2})-(\d{2})/; 2 const maset = RE_DATA.exec('1999-12-31'); 3 console.log(maset[1]); 4 console.log(maset[2]); 5 console.log(maset[3]); 6 7 // 1999 8 // 12 9 // 31
看完這段代碼是否是以爲以前本身處理時間的時候白白寫了不少代碼,反正我是這樣以爲的,我一直都是對後臺傳給個人時間字段進行split分隔,顯得很low,有了組匹配是否是高大上了不少,嘿嘿。
所謂具名組匹配就是在圓括號內部,在模式的頭部添加「問號 + 尖括號 + 組名」,而後在exec方法中返回結果的groups屬性上引用該組名,看下面代碼
1 const RE_DATA_REG = /(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})/; 2 3 const maset_re = RE_DATA_REG.exec('1999-12-31'); 4 5 console.log(maset_re.groups.year); 6 console.log(maset_re.groups.year); 7 console.log(maset_re.groups.year); 8 9 10 // 1999 11 // 12 12 // 31