【问题标题】:JavaScript block comments end prematurely due to RegExp syntax由于 RegExp 语法,JavaScript 块注释过早结束
【发布时间】:2026-01-27 08:15:02
【问题描述】:

这本身不是编程问题,更多的是关于 ECMAScript/JavaScript 规范的问题。

考虑下面的 JS。

let myexpr = /\*/; // Equivalent to `new RegExp("\\*")`

一切都好,一个匹配字符*的正则表达式。但是如果我们尝试阻止评论

/*
let myexpr = /\*/; // Equivalent to `new RegExp("\\*")`
*/

我们发现正则表达式中的转义字符与结束分隔符一起导致块注释过早结束,解释器尝试执行*/,这是一个明显非法的表达式。我们可以通过放弃 RegExp 构造函数的正则表达式语法来明确解决此问题,但这可能需要更多的转义字符并牺牲可读性。

我想我的问题是:为什么 ES 和/或 JS 规范允许序列 */ 终止正则表达式中的评论,而不是,例如,在字符串中?

【问题讨论】:

  • 注释不是代码-因此注释中的任何内容都不会以任何“特殊”方式处理..您只需要小心注释代码-实际上,我永远不会有实际代码在评论中,这不是 cmets 的用途
  • 这应该是一个答案,不是吗? ;)
  • Jaro 的账号被暂停,所以我正式添加答案。

标签: javascript regex comments


【解决方案1】:

注释中的所有文本都不是代码。在找到*/ 之前,它会被全部跳过。由于文本中有 = /\*/;,编译器将看到 */ 并提前终止注释块。

如果你注释掉一行,你就不会有这个问题:

// let myexpr = /\*/; // Equivalent to `new RegExp("\\*")`

【讨论】:

    最近更新 更多