正則表達式字面量

2018-06-16 14:51 更新

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


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


語法

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

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


語義


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


以上內容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號