正则表达式字面量

2018-06-16 14:51 更新

正则表达式字面量是输入元素,每当字面量被评估时会转换为 RegExp 对象(见 15.10)。当一个程序中有两个正则表达式字面量评估成正则表达式对象,不能用 === 比较他们是否相等,即使两个字面量包含相同内容。RegExp 对象也可以在运行时使用 new RegExp(见 15.10.4)或以函数方式调用 RegExp 构造器来创建(见 15.10.3)。


下面的产生式描述了正则表达式字面量的语法,输入元素扫描器还用它搜索正则表达式字面量的结束位置。RegularExpressionBody 和 RegularExpressionFlags 包含的字符组成的字符串会直接传递给正则表达式构造器,在那里用更严格文法进行解析。一个实现可以扩展正则表达式构造器的文法。但它不能扩展 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。然后,在每次评估字面量时创建新对象,仿佛使用 new RegExp(Pattern, Flags) 一样,这里的 RegExp 是标准内置构造器名。新构造的对象将成为 RegularExpressionLiteral 的值。如果调用 new RegExp 会产生 15.10.4.1 指定的错误,那么必须把错误当作是早期错误 ( 见 第 16 章 )。


以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号