2009-11-01 95 views
1

我正在查看tumblr書籤中的代碼,並好奇下面的代碼做了什麼。正則表達式解釋

try{ 
    if(!/^(.*\.)?tumblr[^.]*$/.test(l.host)) 
     throw(0); 
     tstbklt(); 
} 

任何人都可以告訴我,如果行測試?我試圖解碼正則表達式,但一直無法這樣做。

回答

5

最初不包括正則表達式的具體細節,該代碼:

if (! /.../.test(l.host)) 

「如果不是regex.matches(l.host)」 或「如果l.host與此正則表達式不匹配」​​

因此,正則表達式必須正確描述l.host文本的內容才能使條件失敗,從而避免拋出錯誤。

上到正則表達式本身:

^(.*\.)?tumblr[^.]*$ 

這是檢查的tumblr存在,但只有在.結尾的字符串後可能存在的:

^  # start of line 
(  # begin capturing group 1 
.*  # match any (non-newline) character, as many times as possible, but zero allowed 
\.  # match a literal . 
)  # end capturing group 1 
?  # make whole preceeding item optional 
tumblr # match literal text tumblr 
[^.]* # match any non . character, as many times as possible, but zero allowed 
$  # match end of line 


我認爲這是測試,看看主機是否tumblr

是的,它看起來像它可能是要檢查,但如果是這樣做是錯誤的方式來做到這一點。
爲此,第一比特應該像^(?:[\w-]+\.)?捕獲一個字母數字子域(所述?:是一個非捕獲基團,所述[\w-]+爲至少1個字母數字,下劃線或連字符)和最後位應爲\.(?:com|net|org)$或也許像(?:\.[a-zA-Z]+)+$,這取決於tld部分可能需要的靈活性。

+0

偉大的方式來顯示過程。比我的更好。你贏得我的讚賞! – Bartek 2009-11-01 14:18:02

+0

我以爲是測試主機是否是tumblr,但是當我測試它時(通過在tumblr.com上運行小書籤),我沒有看到它有任何不同。 – SonnyBurnette 2009-11-01 14:27:46

+0

是的,它看起來好像可能試圖做到這一點,但如果這是意圖這是錯誤的。我已經添加了一些額外的內容(雖然真正的URL驗證可能會更復雜一點)。 – 2009-11-01 14:59:28

1

我試圖分解它。我不是專家,不過正則表達式(。)?

if(!/^tumblr $ /測試(l.host))

這部分是不是真的正則表達式[^]。但是告訴我們只在這個測試不起作用時才執行if()。

如果(!/ ^(.*\.)?tumblr [^。] * $ /測試(l.host))

這部分允許tumblr字之前的任何字符,只要他們後面是.但它是所有可選的(見?末)

如果(!/ ^(。*)?tumblr ** ** [^.]*$/。測試(l.host))

其次,它匹配任何性格除外。並且*$將其擴展爲匹配任何字符(因此它不會在1之後中斷),並且它一直運行直到字符串結束。

最後,.test()看起來測試它與當前的主機名或任何l.host包含(我不熟悉的tumblr書籤)

所以基本上,它看起來像那部分檢查,看看是如果主機不是tumblr的一部分,然後拋出該異常。

期待看我怎麼錯了我:)