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字元。利用這一點,可以寫出乙個正確返回字串長度的函式。
functioncodepointlength(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()
functionescaperegexp(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命令宣告的常量也是不提公升,同樣存在暫時性死...