以下代碼是否有效?在JavaScript正則表達式中「 /」是否有效?
function test() {
return /\//.exec("\/");
}
alert(test());
似乎很多的JavaScript minifiers(包括http://jscompress.com/ jsmin)審議「//」,第二行是一個註釋的開始。我認爲這是「簡單」實現的縮減器中的一個錯誤,因爲我試過的所有瀏覽器實現都沒有問題。 Try it on jsfiddle。
以下代碼是否有效?在JavaScript正則表達式中「 /」是否有效?
function test() {
return /\//.exec("\/");
}
alert(test());
似乎很多的JavaScript minifiers(包括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
的一部分,因此不能成爲//
評論標記的一部分。
是的,這是有效的javascript :)這是一個在minifier中的錯誤,應該可能被修復。你可以避開它,如果你通過使您的正則希望有在它的結束愚蠢的東西,如:
return /\/(?:.|$)/.exec("\/");
這基本上說,無論是字符串的結尾,或者不是字符串的結束,而不捕獲。但我不認爲這是一個很好的解決方案,我不會使用它自己哈哈。
所以這就是爲什麼一些正則表達式引擎允許你指定不同的分隔符... – BoltClock
我想知道規範是如何表明這不會開始評論。 – pimvdb
也許'var q =「//」;'的方式是有效的。 –