我正在查看tumblr書籤中的代碼,並好奇下面的代碼做了什麼。正則表達式解釋
try{
if(!/^(.*\.)?tumblr[^.]*$/.test(l.host))
throw(0);
tstbklt();
}
任何人都可以告訴我,如果行測試?我試圖解碼正則表達式,但一直無法這樣做。
我正在查看tumblr書籤中的代碼,並好奇下面的代碼做了什麼。正則表達式解釋
try{
if(!/^(.*\.)?tumblr[^.]*$/.test(l.host))
throw(0);
tstbklt();
}
任何人都可以告訴我,如果行測試?我試圖解碼正則表達式,但一直無法這樣做。
最初不包括正則表達式的具體細節,該代碼:
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部分可能需要的靈活性。
我試圖分解它。我不是專家,不過正則表達式(。)?
if(!/
^tumblr $ /測試(l.host))
這部分是不是真的正則表達式[^]。但是告訴我們只在這個測試不起作用時才執行if()。
如果(!/ ^(.*\.)?tumblr
[^。] * $ /測試(l.host))
這部分允許tumblr字之前的任何字符,只要他們後面是.
但它是所有可選的(見?
末)
如果(!/ ^(。*)?tumblr ** ** [^.]*$/
。測試(l.host))
其次,它匹配任何性格除外。並且*$
將其擴展爲匹配任何字符(因此它不會在1之後中斷),並且它一直運行直到字符串結束。
最後,.test()
看起來測試它與當前的主機名或任何l.host包含(我不熟悉的tumblr書籤)
所以基本上,它看起來像那部分檢查,看看是如果主機不是tumblr的一部分,然後拋出該異常。
期待看我怎麼錯了我:)
偉大的方式來顯示過程。比我的更好。你贏得我的讚賞! – Bartek 2009-11-01 14:18:02
我以爲是測試主機是否是tumblr,但是當我測試它時(通過在tumblr.com上運行小書籤),我沒有看到它有任何不同。 – SonnyBurnette 2009-11-01 14:27:46
是的,它看起來好像可能試圖做到這一點,但如果這是意圖這是錯誤的。我已經添加了一些額外的內容(雖然真正的URL驗證可能會更復雜一點)。 – 2009-11-01 14:59:28