首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >{}/a/g中的/a/g是正则还是除法?

问{}/a/g中的/a/g是正则还是除法?
EN

Stack Overflow用户
提问于 2014-11-24 10:35:41
回答 1查看 166关注 0票数 1

我正在编写一个基于JavaCC的JavaScript解析器 (ECMAScript 5.1),并且有一个有趣的带有正则表达式的角落案例。这就是了。

考虑以下声明:

代码语言:javascript
复制
{}/a/g

我的问题是:从规范的角度来看,它是否应该被解释为

  • ObjectLiteral除以Identifier a除以Identifier b或
  • Block接RegularExpressionLiteral /a/g

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

从规范的角度来看,/a/g in {}/a/g 是一个规范还是一个部门?

下面是我认为是规范的相关部分:

在语法上下文中,不允许使用领先的划分或除法分配,也不允许使用领先的RegularExpressionLiteral。

引用另一个答案关于相关问题的话

除法运算符必须跟随表达式,而正则表达式文字不能跟随表达式,因此在所有其他情况下,您可以安全地假定您正在查看正则表达式文字。

我的理解是,{}是一个表达式。ObjectLiteral,即使是空的也是PrimaryExpression。因此,下面的/a/g必须是一个除法,而不是正则表达式文字。

还是我错了?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-24 11:15:44

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27102746

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档