49

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

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   

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

4

10 回答 10

78

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

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

适用于以下 URL:

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://www.youtube-nocookie.com/embed/DFYRQ_zQ-gk?autoplay=1
https://www.youtube-nocookie.com/embed/DFYRQ_zQ-gk
http://www.youtube-nocookie.com/embed/DFYRQ_zQ-gk
//www.youtube-nocookie.com/embed/DFYRQ_zQ-gk
www.youtube-nocookie.com/embed/DFYRQ_zQ-gk
https://youtube-nocookie.com/embed/DFYRQ_zQ-gk
http://youtube-nocookie.com/embed/DFYRQ_zQ-gk
//youtube-nocookie.com/embed/DFYRQ_zQ-gk
youtube-nocookie.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. 请求参数

https://regex101.com/r/vHEc61/1

于 2016-06-08T13:49:33.513 回答
57
  • www在你的正则表达式中丢失了
  • \.如果您想同时匹配两者youtu.be,第二个应该是可选的youtube(但我没有更改它,因为它youtube实际上不是一个有效的域 - 请参见下面的注释)
  • +在您的正则表达式中允许一个或多个(youtube\.com|youtu\.be),而不是一个或多个通配符。
    您需要使用 a.来表示通配符,并+表示您需要其中的一个或多个。

尝试:

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

现场演示

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

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

现场演示

无效的替代品:

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

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

youtube/cCnrX1w5luM(带或不带http://)不是有效的 URL,但问题明确提到正则表达式应该支持它。要包括这一点,请在上面的任何正则表达式中替换youtu\.be为。现场演示youtu\.?be

于 2013-10-15T09:16:06.853 回答
18

我知道我迟到了 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\_-]+)
于 2015-06-12T04:14:47.553 回答
12

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

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

测试在这里

于 2016-12-07T23:51:03.347 回答
4

基于许多其他正则表达式;这是我所拥有的最好的:

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

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

于 2015-07-30T14:35:54.463 回答
3

试试这个:

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

http://regexr.com?36o7a

于 2013-10-15T09:20:40.380 回答
2

我试过这个,它对我来说很好用。

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

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

于 2017-10-11T14:13:07.067 回答
1

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

^(?: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\_-]+)*(?:[&\/\#].*)?$

于 2021-04-25T16:16:37.450 回答
0

https://regexr.com/62kgd

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

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

于 2021-07-27T10:41:13.350 回答
-4

请改为检查此模式:

r'(?i)(http.//|https.//)*[A-Za-z0-9._%+-]+\.\w+'
于 2013-10-15T09:16:24.407 回答