【问题标题】:Regex for youtube URLyoutube URL 的正则表达式
【发布时间】:2013-10-23 00:34:04
【问题描述】:

我正在使用以下正则表达式来验证 youtube 视频 share 网址。

var valid = /^(http\:\/\/)?(youtube\.com|youtu\.be)+$/;
alert(valid.test(url));
return false;

我希望正则表达式支持以下 URL 格式:

http://youtu.be/cCnrX1w5luM  
http://youtube/cCnrX1w5luM  
www.youtube.com/cCnrX1w5luM  
youtube/cCnrX1w5luM  
youtu.be/cCnrX1w5luM   

我尝试了不同的正则表达式,但没有找到适合共享链接的正则表达式。谁能帮我解决这个问题。提前致谢。

【问题讨论】:

    标签: regex youtube


    【解决方案1】:
    • 您的正则表达式中缺少www
    • 如果您想同时匹配youtu.be 和youtube,第二个\. 应该是可选的(但我没有更改这一点,因为youtube 实际上不是一个有效的域 - 请参阅下面的注释)李>
    • 正则表达式中的+ 允许(youtube\.com|youtu\.be) 中的一个或多个,而不是一个或多个通配符。
      您需要使用. 表示通配符,使用+ 表示您需要其中的一个或多个。

    试试:

    ^(https?\:\/\/)?(www\.youtube\.com|youtu\.be)\/.+$
    

    Live demo.

    如果您希望它匹配带有或不带有 www. 的 URL,只需将其设为可选:

    ^(https?\:\/\/)?((www\.)?youtube\.com|youtu\.be)\/.+$
    

    Live demo.

    替代品无效:

    如果您希望 www.youtu.be/... 也匹配(在撰写本文时,这似乎不是有效的 URL 格式),请将可选的 www. 放在括号外:

    ^(https?\:\/\/)?(www\.)?(youtube\.com|youtu\.be)\/.+$
    

    youtube/cCnrX1w5luM(有或没有http://)不是有效的 URL,但问题明确提到正则表达式应该支持它。要包含此内容,请在上述任何正则表达式中将 youtu\.be 替换为 youtu\.?be。 Live demo.

    【讨论】:

    • 我认为youtu\.?be 中的问号是错误的:如果 URL 确实指向 http(s)://youtu,您总是希望在 URL 中包含确切的字符串 youtu.be 。是。 ?
    • @TomášPospíšek 已编辑。
    【解决方案2】:

    改为检查此模式:

    r'(?i)(http.//|https.//)*[A-Za-z0-9._%+-]+\.\w+'
    

    【讨论】:

      【解决方案3】:

      试试这个:

      ((http://)?)(www\.)?((youtube\.com/)|(youtu\.be)|(youtube)).+
      

      http://regexr.com?36o7a

      【讨论】:

      • 那里有一些不必要的括号 - ...(youtube\.com/|youtu.be|youtube).*,你可能想在 youtu.be 中转义 .,你可能想把 / 放在外面(所以它被包括在内youtu.be 和 youtube)。
      【解决方案4】:

      我知道我迟到了 2 年,但无论如何我都需要写一些东西,而且似乎适合我可以提交的所有测试用例。应该能够引用第一个匹配项 ($1) 来获取 ID。匹配 http、https、www 和非 www、youtube.com、youtu.be、/watch?和/watch.php?在 youtube.com 上(youtu.be 不使用这些),即使 URL 字符串中有其他变量(?t= 表示时间,?list= 表示播放列表等),它也支持匹配。

      (?:https?:\/\/)?(?:youtu\.be\/|(?:www\.|m\.)?youtube\.com\/(?:watch|v|embed)(?:\.php)?(?:\?.*v=|\/))([a-zA-Z0-9\_-]+)
      

      【讨论】:

      • 你有没有机会更新它以支持youtube.com/watch/IDHERE,这是有效的?
      • @JacobMorrison 又晚了两年,但到底是什么 - 更新了代码:)
      • ^(?:https?:)?(?:\/\/)?(?:youtu\.be\/|(?:www\.|m\.)?youtube\.com\/(?:watch|v|embed)(?:\.php)?(?:\?.*v=|\/))([a-zA-Z0-9\_-]{7,15})(?:[\?&][a-zA-Z0-9\_-]+=[a-zA-Z0-9\_-]+)*$ 对其进行了一些改进,以便检查条目以 url 开头和结尾,因此 extra text youtube.com/embed/DFYRQ_zQ-gk extra text 之类的内容无效。还添加了验证id不少于7个符号
      【解决方案5】:

      基于许多其他正则表达式;这是我得到的最好的:

      ((http(s)?:\/\/)?)(www\.)?((youtube\.com\/)|(youtu.be\/))[\S]+
      

      测试: http://regexr.com/3bga2

      【讨论】:

        【解决方案6】:

        这是我用来匹配和捕获带有视频代码的 YouTube URL 的重要位的正则表达式:

        ^((?:https?:)?\/\/)?((?:www|m)\.)?((?:youtube\.com|youtu.be))(\/(?:[\w\-]+\?v=|embed\/|v\/)?)([\w\-]+)(\S+)?$
        

        适用于以下网址:

        https://www.youtube.com/watch?v=DFYRQ_zQ-gk&feature=featured
        https://www.youtube.com/watch?v=DFYRQ_zQ-gk
        http://www.youtube.com/watch?v=DFYRQ_zQ-gk
        //www.youtube.com/watch?v=DFYRQ_zQ-gk
        www.youtube.com/watch?v=DFYRQ_zQ-gk
        https://youtube.com/watch?v=DFYRQ_zQ-gk
        http://youtube.com/watch?v=DFYRQ_zQ-gk
        //youtube.com/watch?v=DFYRQ_zQ-gk
        youtube.com/watch?v=DFYRQ_zQ-gk
        
        https://m.youtube.com/watch?v=DFYRQ_zQ-gk
        http://m.youtube.com/watch?v=DFYRQ_zQ-gk
        //m.youtube.com/watch?v=DFYRQ_zQ-gk
        m.youtube.com/watch?v=DFYRQ_zQ-gk
        
        https://www.youtube.com/v/DFYRQ_zQ-gk?fs=1&hl=en_US
        http://www.youtube.com/v/DFYRQ_zQ-gk?fs=1&hl=en_US
        //www.youtube.com/v/DFYRQ_zQ-gk?fs=1&hl=en_US
        www.youtube.com/v/DFYRQ_zQ-gk?fs=1&hl=en_US
        youtube.com/v/DFYRQ_zQ-gk?fs=1&hl=en_US
        
        https://www.youtube.com/embed/DFYRQ_zQ-gk?autoplay=1
        https://www.youtube.com/embed/DFYRQ_zQ-gk
        http://www.youtube.com/embed/DFYRQ_zQ-gk
        //www.youtube.com/embed/DFYRQ_zQ-gk
        www.youtube.com/embed/DFYRQ_zQ-gk
        https://youtube.com/embed/DFYRQ_zQ-gk
        http://youtube.com/embed/DFYRQ_zQ-gk
        //youtube.com/embed/DFYRQ_zQ-gk
        youtube.com/embed/DFYRQ_zQ-gk
        
        https://youtu.be/DFYRQ_zQ-gk?t=120
        https://youtu.be/DFYRQ_zQ-gk
        http://youtu.be/DFYRQ_zQ-gk
        //youtu.be/DFYRQ_zQ-gk
        youtu.be/DFYRQ_zQ-gk
        
        https://www.youtube.com/HamdiKickProduction?v=DFYRQ_zQ-gk
        

        捕获的组是:

        1. 协议
        2. 子域
        3. 域
        4. 路径
        5. 视频代码
        6. 查询字符串

        http://regexr.com/3dj5t

        【讨论】:

        【解决方案7】:

        YouTube 视频的格式已更改。此正则表达式适用于所有情况:

        ^(http(s)??\:\/\/)?(www\.)?((youtube\.com\/watch\?v=)|(youtu.be\/))([a-zA-Z0-9\-_])+
        

        测试here。

        【讨论】:

        • 发生了什么变化? phuc77 的回答似乎更好。
        • 使用 phuc77 的答案:regex101.com/r/RyE7OM/2/tests 并非所有这些测试都能通过。具体来说,youtube.com/foo_bar 和 youtube.com/watch?v= 不应验证。
        • 任何寻找解决方案的人都应该使用这个答案。这是迄今为止我发现的最好的。
        • 如果你想捕捉 ID,那么你的正则表达式中有一个错字,最后的 + 号应该在最后一个括号之前,否则它只会捕捉最后一个字母。最终的正则表达式应如下所示^(http(s)??\:\/\/)?(www\.)?((youtube\.com\/watch\?v=)|(youtu.be\/))([a-zA-Z0-9\-_]+)
        • phuc77 似乎更好,这个答案没有通过所有测试:regexr.com/4b2fh
        【解决方案8】:

        我试过这个,对我来说效果很好。

        (?:http(?:s)?:\/\/)?(?:www\.)?(?:youtu\.be\/|youtube\.com\/(?:(?:watch)?\?(?:.*&)?v(?:i)?=|(?:embed|v|vi|user)\/))([^\?&\"'<> #]+)
        

        您可以在这里查看https://regex101.com/r/Kvk0nB/1

        【讨论】:

        • 你确定这有效吗?
        【解决方案9】:

        我从这里获取了一个答案,并添加了对我在数据集中注意到的一些边缘情况的支持。这应该适用于几乎任何有效的网址。

        ^(?:https?:)?(?:\/\/)?(?:youtu\.be\/|(?:www\.|m\.)?youtube\.com\/(?:watch|v|embed)(?:\.php)?(?:\?.*v=|\/))([a-zA-Z0-9\_-]{7,15})(?:[\?&amp;][a-zA-Z0-9\_-]+=[a-zA-Z0-9\_-]+)*(?:[&amp;\/\#].*)?$

        【讨论】:

          【解决方案10】:

          https://regexr.com/62kgd

          ^((http|https)\:\/\/)?(www\.youtube\.com|youtu\.?be)\/((watch\?v=)?([a-zA-Z0-9]{11}))(&amp;.*)*$

          https://www.youtube.com/watch?v=YPz9zqakRbk

          https://www.youtube.com/watch?v=YPz9zqakRbk&t=11

          http://youtu.be/cCnrX1w5luM&y=12

          http://youtu.be/cCnrX1w5luM

          http://youtube/cCnrXswsluM

          www.youtube.com/cCnrX1w5luM

          youtube/cCnrX1w5luM

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-01-07
            • 1970-01-01
            • 2013-06-18
            • 1970-01-01
            • 2012-11-08
            相关资源
            最近更新 更多