javascript - {}/a/g 中的/a/g 是正则表达式还是除法?

标签 javascript regex grammar language-lawyer ecmascript-5

我正在写一个 JavaCC-based parser for JavaScript ( ECMAScript 5.1 ) 并且有一个有趣的正则表达式极端案例。在这里。

考虑以下语句:

{}/a/g

我的问题:从规范的 Angular 来看,是否应该解释为

  • ObjectLiteral 除以 Identifier a 除以 Identifier b
  • Block 后跟 RegularExpressionLiteral/a/g?

例如,Chrome 将其解释为后者和其他解析器。

从规范的 Angular 来看,{}/a/g中的/a/g是regex还是division?

这是我认为的 relevant part规范:

There are no syntactic grammar contexts where both a leading division or division-assignment, and a leading RegularExpressionLiteral are permitted.

引用 another answerrelevant question 上:

The division operator must follow an expression, and a regular expression literal can't follow an expression, so in all other cases you can safely assume you're looking at a regular expression literal.

我的理解是 {} 一个表达式。 ObjectLiteral , 即使是空的也是 PrimaryExpression .所以后面的/a/g一定是除法,不是正则表达式字面量。

还是我错了?

最佳答案

不,{} 在这种情况下不是表达式。引用注释标准的相关部分:http://es5.github.io/#x12.4ExpressionStatement 不能以左大括号开头,因为这可能会使它与 Block 产生歧义”。在您的情况下,{}/a/g 是一个 block ,后跟由正则表达式文字组成的表达式语句。

关于javascript - {}/a/g 中的/a/g 是正则表达式还是除法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27102746/

相关文章:

python - 如何正确解析右括号

java - Java、C++、C# 等如何使用 < 和 > 来解决这种特殊的语法歧义?

c# - 分别使用 ANTLR Parser 和 Lexer

php - 如何使用 JavaScript/PHP 从图像中获取地理位置数据?

javascript - 强制指定通用闭包类型

javascript - 庄稼 : image bigger than viewport

c# - 正则表达式 C# - 是否可以在匹配时提取匹配项?

java正则表达式将ip地址和端口号匹配为捕获组

javascript - 这个自定义元素会起作用吗?我已经把它从 Material Design lite 上拿下来了

parsing - ANTLR 解析树修改