2011-07-21 18 views
7

Aşağıdaki kod geçerli mi?" /" javascript regex'in içinde geçerli mi?

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

O (http://jscompress.com/ de JSMin'i dahil) birçok javascript minifiers bir yorumun başlangıcı ikinci satırda "//" dikkate görünüyor. Ben "önemsiz" uygulanan minifiers bir hata olduğunu düşünüyorum, çünkü ben denedim tüm tarayıcı uygulamaları bir sorun olmadan çalıştırın. Try it on jsfiddle.

+3

Bu nedenle, bazı düzenli ifade motorları farklı sınırlayıcılar belirtmenize izin verir ... – BoltClock

+0

Spesifikasyonun bunun bir yorum yapmaya başlamadığını nasıl belirlediğini merak ediyorum. – pimvdb

+1

Muhtemelen "var q =" // ";' ile aynı şekilde geçerlidir. –

cevap

3

ve ona göre geçerli olduğunu: satır: için

/\//.exec("\/"); 

değerlendirir

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 

\/ kabul edilir bir RegularExpressionBackslashSequence ve dolayısıyla RegularExpressionBody'un bir parçası olup, sonuç olarak // yorum işaretçisinin bir parçası olamaz.

3

Evet, bu geçerli bir javascript :) Bu, küçük bir hatadır ve muhtemelen düzeltilmelidir. yakalama olmadan

return /\/(?:.|$)/.exec("\/"); 
temelde diyor

ya dizisinin ucunu, ya da değil dize sonu: Beğendiğiniz Eğer regex yaparak istiyorsa etrafında almak bunun sonunda aptalca bir şey olabilir . Ama bunun iyi bir çözüm olduğunu düşünmüyorum ve bunu kendim kullanamayacağım.

+4

Daha iyi: 'yeni RegExp ("/"). Exec (" \/");' – BoltClock

+0

Ah, elbette! haha – Paulpro

+1

@PaulPRO '. | $' yeni bir satırla eşleşmiyor, bu yüzden orijinal regexp'e eşdeğer değil. – Karolis

3

Evet, bu yasaldır. \/, bir literal / ile eşleşir. İlk \, /'dan çıkar. Ben gözlük yukarı bakarak ilgi

["/"] 
+0

Kemanda gösterildiği gibi :) – BoltClock

İlgili konular