我正在查看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