ECMAScript正则表达式与其语法字符匹配吗



我指的是中定义的ECMAScript正则表达式语法https://tc39.es/ecma262/#sec-regexp正则表达式对象。

我通过几个在线来源检查了以下模式在正则表达式中的匹配情况。

Pattern: /[[]]/

他们都包括

[ -> Match any character in the character set
[ -> Matches a `[` character 
]
] -> Matches a `]` character

我知道字符集是如何匹配的,但我不明白为什么最后一个右括号(](是匹配的。根据语法定义的ECMAScript规范,PatternCharacter只能是不是SyntaxCharacterSourceCharacter,这不是正则表达式中的语法错误吗(https://tc39.es/ecma262/#prod-PatternCharacter(?闭合括号(](是一个SyntaxCharacter

PatternCharacter ::
SourceCharacter but not SyntaxCharacter

在附件B Web浏览器的附加ECMAScript功能中,同一规范的B.1.2正则表达式模式一节中,它说:

22.2.1的语法修改和扩展如下。这些变化引入了歧义,语法产物的顺序和上下文信息打破了歧义。当使用以下语法进行解析时,只有在以前的生产备选方案不匹配的情况下,才会考虑每个备选方案。

在那里,我们发现可以是扩展原子,它又可以是扩展模式特征

SourceCharacter,但不是^ $ . * + ? ( ) [ |之一

所以这里允许]

本规范的附件B介绍了:

当ECMAScript主机是web浏览器时,需要本附件中定义的ECMASscript语言语法和语义。如果ECMAScript主机不是web浏览器,则本附件的内容是规范性的,但是可选的。

有趣的是;额外的";NodeJS中也提供了行为,尽管根据本规范它不必这样做。

相关内容

  • 没有找到相关文章

最新更新