Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/469.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 正则表达式解释_Javascript_Regex_Bookmarklet - Fatal编程技术网

Javascript 正则表达式解释

Javascript 正则表达式解释,javascript,regex,bookmarklet,Javascript,Regex,Bookmarklet,我正在查看tumblr bookmarklet中的代码,很好奇下面的代码做了什么 try{ if(!/^(.*\.)?tumblr[^.]*$/.test(l.host)) throw(0); tstbklt(); } 谁能告诉我if线正在测试什么?我试图解码正则表达式,但一直无法做到。我试图将其分解。但是,我不是正则表达式专家: 如果(!/^(..)-tumblr[^.]$/.test(l.host)) 这部分并不是真正的正则表达式,但告诉我们只有在这

我正在查看tumblr bookmarklet中的代码,很好奇下面的代码做了什么

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

谁能告诉我if线正在测试什么?我试图解码正则表达式,但一直无法做到。

我试图将其分解。但是,我不是正则表达式专家:

如果(!/
^(..)-tumblr[^.]$/.test(l.host))

这部分并不是真正的正则表达式,但告诉我们只有在这个测试不起作用时才执行if()

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

此部分允许tumblr单词前面的任何字符,只要它们后面跟一个
,但都是可选的(请参见末尾的

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

接下来,它将匹配除字符外的任何字符。如果
*$
扩展它以匹配后面的任何字符(因此它不会在1之后中断),它将一直工作到字符串的末尾

最后,
.test()
将根据当前主机名或l.host包含的任何内容对其进行测试(我不熟悉tumblr bookmarklet)

所以基本上,这部分看起来是在检查,如果主机不是tumblr的一部分,那么抛出该异常


期待着看到我的错误:)

我试图打破它。但是,我不是正则表达式专家:

如果(!/
^(..)-tumblr[^.]$/.test(l.host))

这部分并不是真正的正则表达式,但告诉我们只有在这个测试不起作用时才执行if()

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

此部分允许tumblr单词前面的任何字符,只要它们后面跟一个
,但都是可选的(请参见末尾的

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

接下来,它将匹配除字符外的任何字符。如果
*$
扩展它以匹配后面的任何字符(因此它不会在1之后中断),它将一直工作到字符串的末尾

最后,
.test()
将根据当前主机名或l.host包含的任何内容对其进行测试(我不熟悉tumblr bookmarklet)

所以基本上,这部分看起来是在检查,如果主机不是tumblr的一部分,那么抛出该异常


期待看到我的错误:)

最初排除正则表达式的细节,代码如下:

if ( ! /.../.test(l.host) )
“if not regex.matches(l.host)”或“if l.host不匹配此regex”

因此,正则表达式必须正确描述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 ( ! /.../.test(l.host) )
“if not regex.matches(l.host)”或“if l.host不匹配此regex”

因此,正则表达式必须正确描述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部分可能需要多大的灵活性。

这是展示流程的好方法。比我的好多了。你赢得了我的选票!我以为它是在测试主机是否是tumblr,但当我测试它时(通过在tumblr.com上运行bookmarklet),我没有发现它的行为有任何不同。是的,它看起来肯定是在尝试这样做,但如果这是目的,那就错了。关于这一点,我已经添加了一些额外的内容(尽管真正的URL验证可能要复杂一点)。感谢您的后续介绍。这就是为什么当我在他们的网站上查看它时,它的行为没有任何不同。使用您的新方法,是否需要在domain.com之前使用某种字符串?如果用户只是在tumblr.com上(没有www),那么它会通过/失败吗?不,它仍然在组后获得
,以使子域部分成为可选部分。刚才看到我没有在我的问题中发布完整的更新版本,所以在这里:
^(?[\w-]+\)?tumblr\(?:com | net | org)$
展示过程的好方法。比我的好多了。你赢得了我的选票!我以为它是在测试主机是否是tumblr,但当我测试它时(通过在tumblr.com上运行bookmarklet),我没有发现它的行为有任何不同。是的,它看起来肯定是在尝试这样做,但如果这是目的,那就错了。关于这一点,我已经添加了一些额外的内容(尽管真正的URL验证可能要复杂一点)。感谢您的后续介绍。这就是为什么我检查它时,它的行为没有任何不同