我正在查看 tumblr 书签中的代码,很好奇下面的代码做了什么。
try{
if(!/^(.*\.)?tumblr[^.]*$/.test(l.host))
throw(0);
tstbklt();
}
谁能告诉我 if 行正在测试什么?我试图解码正则表达式,但无法这样做。
我正在查看 tumblr 书签中的代码,很好奇下面的代码做了什么。
try{
if(!/^(.*\.)?tumblr[^.]*$/.test(l.host))
throw(0);
tstbklt();
}
谁能告诉我 if 行正在测试什么?我试图解码正则表达式,但无法这样做。
最初排除正则表达式的细节,这段代码是:
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[^.] $/.test(l.host))
这部分不是真正的正则表达式,而是告诉我们仅在此测试不起作用时才执行 if() 。
if(!/ ^(.*\.)?tumblr
[^.]*$/.test(l.host))
这部分允许 tumblr 单词之前的任何字符,只要它们后面跟着 a.
但这都是可选的(见?
最后)
if(!/^(.*.)?tumblr** [^.]*$/
**.test(l.host))
接下来,它匹配除 . 之外的任何字符。并且它*$
扩展它以匹配之后的任何字符(因此它不会在 1 之后中断)并且它一直工作到字符串的末尾。
最后,.test()
根据当前主机名或 l.host 包含的任何内容对其进行测试(我不熟悉 tumblr 小书签)
所以基本上,看起来该部分正在检查是否主机不是 tumblr 的一部分,然后抛出该异常。
期待看到我错了:)