正则表达式从youtube网址中提取视频ID或播放列表ID

jol*_*shy 4 javascript regex youtube

我想知道如何根据url使用单个正则表达式提取youtube视频ID或播放列表ID.正则表达式还应该确保域名是youtube.com以下是我需要的一些结果:

提取播放列表ID

    https://www.youtube.com/playlist?list=PLuC2HflhhpLGQ4RgqA76_Gv52fGA0909r
    www.youtube.com/playlist?list=PLuC2HflhhpLGQ4RgqA76_Gv52fGA0909r
    http://www.youtube.com/playlist?list=PLuC2HflhhpLGQ4RgqA76_Gv52fGA0909r
    https://www.youtube.com/embed/videoseries?list=PLuC2HflhhpLGQ4RgqA76_Gv52fGA0909r  
Run Code Online (Sandbox Code Playgroud)

提取视频ID

https://www.youtube.com/watch?v=fqMfRi2gJok&index=1&list=PLuC2HflhhpLGQ4RgqA76_Gv52fGA0909r
https://www.youtube.com/watch?v=fqMfRi2gJok
http://youtu.be/cCnrX1w5luM 
http://youtube.com/embed/cCnrX1w5luM
http://youtube.com/v/cCnrX1w5luM
https://www.youtube.com/v/cCnrX1w5luM
www.youtube.com/v/cCnrX1w5luM
youtube.com/v/cCnrX1w5luM
Run Code Online (Sandbox Code Playgroud)

这些只是示例网址.我需要为所有可能的youtube链接结构提取相应的ID.

简而言之,提取视频ID,如果不存在,则获取播放列表ID.

fro*_*hem 8

您的问题明确有两种模式

首先:

^.*?(?:v|list)=(.*?)(?:&|$)
Run Code Online (Sandbox Code Playgroud)

对于任何具有显式属性的网址,或者您可以说它们=在网址中包含符号.

说明

^.*?(?:v|list)=:任何字符串,直到字v=list=其中这里我们喜欢vlist,

(.*?)(?:&|$):这结束了任意字符串&符号或结束符号线$,其在这里我们宁愿&$.

第二:

^(?:(?!=).)*\/(.*)$
Run Code Online (Sandbox Code Playgroud)

对于任何没有属性的url或=url中没有符号的url.

说明

^(?:(?!=).)*\/:任何没有=符号的字符串(此处由负向前瞻处理(?!=))直到/符号,

(.*)$:任何字符串,直到行尾.

将它们组合成一个我们得到的正则表达式

^(?:https?:\/\/)?(?:www\.)?youtu\.?be(?:\.com)?.*?(?:v|list)=(.*?)(?:&|$)|^(?:https?:\/\/)?(?:www\.)?youtu\.?be(?:\.com)?(?:(?!=).)*\/(.*)$
Run Code Online (Sandbox Code Playgroud)

这里,

(?:https?:\/\/)?(?:www\.)?youtu\.?be(?:\.com)?被添加以处理各种形式的www.youtube.com的网址

这应该可以帮助你得到你想要的东西

见:DEMO

重要说明:这个问题,提问者想要idwww.youtube.com中提取他更喜欢"视频ID"而不是"播放列表ID".