js ES6學習筆記 正則的擴充套件

2021-09-07 09:18:05 字數 2304 閱讀 5707

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

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

2、字串物件共有4個方法,可以使用正規表示式:

match()replace()search()split()。es6將這4個方法,在語言內部全部呼叫regexp的例項方法,從而做到所有與正則相關的方法,全都定義在regexp物件上。

3、es6對正規表示式新增了u修飾符,含義為「unicode模式」,用來正確處理大於\uffff的unicode字元。也就是說,會正確處理四個位元組的utf-16編碼。對於碼點大於0xffff的unicode字元,點字元不能識別,必須加上u修飾符。es6新增了使用大括號表示unicode字元,這種表示法在正規表示式中必須加上u修飾符,才能識別。

/\u/.test('a') //

false

/\u/u.test('a') //

true

/\u/u.test('?') //

true

4、u修飾符也影響到預定義模式,能否正確識別碼點大於0xffff的unicode字元。\s是預定義模式,匹配所有不是空格的字元。只有加了u修飾符,它才能正確匹配碼點大於0xffff的unicode字元。利用這一點,可以寫出乙個正確返回字串長度的函式。

function

codepointlength(text)

var s = '??';

s.length //4

codepointlength(s) //

2

5、除了u修飾符,es6還為正規表示式新增了y修飾符,叫做「粘連」(sticky)修飾符。

y修飾符的作用與g修飾符類似,也是全域性匹配,後一次匹配都從上一次匹配成功的下乙個位置開始。不同之處在於,g修飾符只要剩餘位置中存在匹配就可,而y修飾符確保匹配必須從剩餘的第乙個位置開始,這也就是「粘連」的涵義。進一步說,y修飾符號隱含了頭部匹配的標誌^。單單乙個y修飾符對match方法,只能返回第乙個匹配,必須與g修飾符聯用,才能返回所有匹配。

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

7、字串必須轉義,才能作為正則模式。已經有提議將這個需求標準化,作為regexp物件的靜態方法regexp.escape()

function

escaperegexp(str) \(\)\*\+\?\.\\\^\$\|]/g, '\\$&');

}let str = '/path/to/resource.html?search=query';

escaperegexp(str)

//"\/path\/to\/resource\.html\?search=query"

8、」先行斷言「指的是,x只有在y前面才匹配,必須寫成/x(?=y)/。比如,只匹配百分號之前的數字,要寫成/\d+(?=%)/。」先行否定斷言「指的是,x只有不在y前面才匹配,必須寫成/x(?!y)/。比如,只匹配不在百分號之前的數字,要寫成/\d+(?!%)/

「後行斷言」正好與「先行斷言」相反,x只有在y後面才匹配,必須寫成/(?<=y)x/。比如,只匹配美元符號之後的數字,要寫成/(?<=\$)\d+/。」後行否定斷言「則與」先行否定斷言「相反,x只有不在y後面才匹配,必須寫成/(?

js ES6學習筆記 Proxy

1 proxy 用於修改某些操作的預設行為,等同於在語言層面做出修改,所以屬於一種 元程式設計 meta programming 即對程式語言進行程式設計。2 proxy 可以理解成,在目標物件之前架設一層 攔截 外界對該物件的訪問,都必須先通過這層攔截,因此提供了一種機制,可以對外界的訪問進行過濾...

js ES6學習筆記 Reflect

1 reflect物件與proxy物件一樣,也是 es6 為了操作物件而提供的新 api。reflect物件的設計目的有這樣幾個。2 reflect.get方法查詢並返回target物件的name屬性,如果沒有該屬性,則返回undefined。3 reflect.set方法設定target物件的na...

js ES6學習筆記 const命令

1 const宣告乙個唯讀的常量。一旦宣告,常量的值就不能改變。2 const宣告的變數不得改變值,這意味著,const一旦宣告變數,就必須立即初始化,不能留到以後賦值。3 const的作用域與let命令相同 只在宣告所在的塊級作用域內有效。4 const命令宣告的常量也是不提公升,同樣存在暫時性死...