这是代码部分:
var
[...snip...]
ye=/^(?:(?:https?|mailto|ftp):|[^:/?#]*(?:[/?#]|$))/i,
此正则表达式使用两次,两次都使用ye.test(a)
。但是,我发现没有不匹配的字符串。我觉得很难相信,但是
这个RegExp
真的匹配所有可以想象的字符串吗?
演示:
var ye = /^(?:(?:https?|mailto|ftp):|[^:/?#]*(?:[/?#]|$))/i;
console.log(ye.test("askjvhlkauehavkn"))
console.log(ye.test("/"))
console.log(ye.test("https:"))
console.log(ye.test("mailto/L:"))
答案 0 :(得分:1)
(?:https?|mailto|ftp)
匹配http
或https
或mailto
或ftp
,后跟
:|[^:/?#]*
,或者::
或除:/>#
之外的任何其他字符,零次或多次,然后跟着(?:[/?#]|$)
,这表示/?#
或结尾之一($
的字符串。
它将匹配mailto:
,ftp:
,https:
,ftpasda
(以ftp
,https
,{{1}开头的任何字符串},http
后跟冒号或mailto
以外的任何其他数字)。
更新
检查后,发现非捕获组之外的替代不仅适用于结肠,也适用于整个组。因此,如果:/>#
或替换中的任何字符串都不匹配,则正则表达式引擎将在提及的替换的另一侧尝试匹配模式。这是不匹配的字符串的示例:mailto
。 Demo.