【问题标题】:Does this RegExp from Google Analytics actually do anything?来自 Google Analytics 的这个 RegExp 真的有什么作用吗?
【发布时间】:2018-10-07 14:44:06
【问题描述】:

这是代码部分:

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:"))

【问题讨论】:

    标签: javascript regex google-analytics


    【解决方案1】:

    (?:https?|mailto|ftp) 匹配 httphttpsmailtoftp 后跟 :|[^:/?#]*,这是替代方案:: 或除 :/># 之外的任何内容,零次或多次,然后是 (?:[/?#]|$),表示 /?# 之一或字符串结尾 ($)。

    它将匹配mailto:ftp:https:ftpasda(任何以ftphttpshttpmailto 开头的字符串,后跟一个冒号或任何数量的任何内容但是:/>#)。

    更新

    经过检查,发现非捕获组之外的交替不仅适用于冒号,而且适用于整个组。因此,如果mailto 或交替中的任何字符串不匹配,正则表达式引擎将尝试在提到的交替的另一侧匹配模式。这是不匹配的字符串示例::///////Demo.

    【讨论】:

    • 连接不优先于|,这意味着(?:https?|mailto|ftp): 是第一个“非此即彼”组,而不仅仅是:?因为它似乎也匹配字符串"ahnwwc"
    • 我刚刚想通了,正在写一个答案,但你打败了我。我会在我的大文章中使用我的措辞,但我会链接到你的答案。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-24
    • 1970-01-01
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    相关资源
    最近更新 更多