2009-11-01 128 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的一部分,然后抛出该异常。

期待看我怎么错了我:)