适用于youtube网址的正则表达式

时间:2013-10-15 09:07:18

标签: regex youtube

我正在使用以下正则表达式验证YouTube视频分享网址。

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

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

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

我尝试了不同的正则表达式,但我找不到合适的共享链接。任何人都可以帮我解决这个问题。提前谢谢。

11 个答案:

答案 0 :(得分:37)

  • 您的正则表达式中缺少www
  • 第二个\.应该是可选的(因为youtu.beyoutube都有效)
  • 正则表达式中的
  • +允许(youtube\.com|youtu\.be)中的一个或多个,而不是一个或多个外卡 您需要使用.来表示外卡,并+表示您需要一个或多个外卡。

尝试:

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

Test

如果您希望匹配带或不带www.的网址,请将其设为可选:

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

如果您希望www.youtu.be/...也匹配,请将可选的www.放在括号外:

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

答案 1 :(得分:37)

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

^((?: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

答案 2 :(得分:9)

我知道我在派对上已经晚了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\-_]+)

答案 3 :(得分:9)

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

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

测试here

答案 4 :(得分:3)

试试这个:

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

http://regexr.com?36o7a

答案 5 :(得分:1)

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

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

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

答案 6 :(得分:1)

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

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

您可以在此处查看https://regex101.com/r/Kvk0nB/1

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

答案 8 :(得分: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

答案 9 :(得分:-1)

我用这个

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

答案 10 :(得分:-5)

请改为检查此模式:

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