RegularExpressionNonTerminator

RegularExpressionNonTerminator

以下代码有效吗?

function test() {
  return /\//.exec("\/");
}
alert(test());

似乎许多JavaScript简化程序(包括http://jscompress.com/处的jsmin)都将第二行中的“//”视为注释的开始。我认为这是“平凡”实现的缩小器中的错误,因为我尝试的所有浏览器实现都没有问题地运行它。 Try it on jsfiddle

最佳答案

我有兴趣在规格中查找它,并且据此有效:

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
\/被视为RegularExpressionBackslashSequence,因此是RegularExpressionBody的一部分,因此不能成为//注释标记的一部分。

08-26 16:44