正則表達(dá)式字面量

2018-06-16 14:51 更新

正則表達(dá)式字面量是輸入元素,每當(dāng)字面量被評估時會轉(zhuǎn)換為 RegExp 對象(見 15.10)。當(dāng)一個程序中有兩個正則表達(dá)式字面量評估成正則表達(dá)式對象,不能用 === 比較他們是否相等,即使兩個字面量包含相同內(nèi)容。RegExp 對象也可以在運(yùn)行時使用 new RegExp(見 15.10.4)或以函數(shù)方式調(diào)用 RegExp 構(gòu)造器來創(chuàng)建(見 15.10.3)。


下面的產(chǎn)生式描述了正則表達(dá)式字面量的語法,輸入元素掃描器還用它搜索正則表達(dá)式字面量的結(jié)束位置。RegularExpressionBody 和 RegularExpressionFlags 包含的字符組成的字符串會直接傳遞給正則表達(dá)式構(gòu)造器,在那里用更嚴(yán)格文法進(jìn)行解析。一個實(shí)現(xiàn)可以擴(kuò)展正則表達(dá)式構(gòu)造器的文法。但它不能擴(kuò)展 RegularExpressionBody 和 RegularExpressionFlags 產(chǎn)生式或使用這些產(chǎn)生式的產(chǎn)生式。


語法

RegularExpressionLiteral :: 
/ RegularExpressionBody / RegularExpressionFlags
RegularExpressionBody :: 
RegularExpressionFirstChar RegularExpressionChars
RegularExpressionChars :: 
[empty] RegularExpressionChars RegularExpressionChar
RegularExpressionFirstChar :: 
RegularExpressionNonTerminator but not *or \or / or [ 
RegularExpressionBackslashSequence 
RegularExpressionClass
RegularExpressionChar :: 
RegularExpressionNonTerminator but not \or / or [ 
RegularExpressionBackslashSequence 
RegularExpressionClass
RegularExpressionBackslashSequence :: 
\RegularExpressionNonTerminator
RegularExpressionNonTerminator :: 
SourceCharacter but not LineTerminator
RegularExpressionClass :: 
[ RegularExpressionClassChars ]
RegularExpressionClassChars :: 
[empty]
RegularExpressionClassChars RegularExpressionClassChar 
RegularExpressionClassChar :: 
RegularExpressionNonTerminator but not ]or \ 
RegularExpressionBackslashSequence
RegularExpressionFlags :: 
[empty] 
RegularExpressionFlags IdentifierPart

注:正則表達(dá)式字面量不能為空;并不是說正則表達(dá)式字面量不能代表空,字符 // 會啟動一個單行注釋。要指定一個空正則,使用:/(?:)/。


語義


正則表達(dá)式字面量會評估為一個 Object 類型值,它是標(biāo)準(zhǔn)內(nèi)置構(gòu)造器 RegExp 的一個實(shí)例。此值取決于兩個步驟:首先,展開組成正則表達(dá)式產(chǎn)生式 RegularExpressionBody 和RegularExpressionFlags 的字符,將其以未解析形式分別存成兩個字符串 Pattern 和 Flags。然后,在每次評估字面量時創(chuàng)建新對象,仿佛使用 new RegExp(Pattern, Flags) 一樣,這里的 RegExp 是標(biāo)準(zhǔn)內(nèi)置構(gòu)造器名。新構(gòu)造的對象將成為 RegularExpressionLiteral 的值。如果調(diào)用 new RegExp 會產(chǎn)生 15.10.4.1 指定的錯誤,那么必須把錯誤當(dāng)作是早期錯誤 ( 見 第 16 章 )。


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號