引數為字串, 那麼第二個引數表示正規表示式的修飾符,如下:
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建構函式第乙個引數是乙個正則物件,那麼可以使用第二個引數指定修飾符。而且,返回的正...