我想要得到v=id从YouTube的URL与JavaScript(没有jQuery,纯JavaScript)。

YouTube URL格式示例

http://www.youtube.com/watch?v=u8nQa1cJyX8&a=GxdCwVVULXctT2lYDEPllDR0LRTutYfW

http://www.youtube.com/watch?v=u8nQa1cJyX8

或在URL中包含视频ID的任何其他YouTube格式。

这些格式的结果

u8nQa1cJyX8


当前回答

简单的正则表达式,如果你有完整的URL,保持简单。

results = url.match("v=([a-zA-Z0-9]+)&?")
videoId = results[1] // watch you need.

其他回答

正如webstrap在评论中提到的:

如果视频以“v”开头,并且它来自youtube .be,它就可以工作 正则表达式包含一个小错误\??v?=?这应该在 注意部分,否则如果id以a开头,您将过滤'v' “v”。这应该能解决问题 / ^。* ((youtu.be \ /) | (v \ /) | (\ w / u \ / \ \ /) |(嵌入\ /)|(看\ ? ? v ?=?))([^#\&\?]*).*/

我做了一个小函数,从Youtube url中提取视频id,如下所示。

var videoId =函数(url) { Var match = url.match(/v=([0-9a-z_-]{1,20})/i); 返回(match ?匹配['1']:false); }; console.log (videoId (' https://www.youtube.com/watch?v=dQw4w9WgXcQ ')); console.log (videoId (' https://www.youtube.com/watch?t=17s&v=dQw4w9WgXcQ ')); console.log (videoId (' https://www.youtube.com/watch?v=dQw4w9WgXcQ&t=17s '));

这个函数将提取视频id,即使url中有多个参数。

在Youtube短片链接的支持下,Dipo从上面的回答修改了正则表达式

(?:https?:\/\/)?(?:www\.)?youtu(?:be)?\.(?:com|be)(?:\/watch\/?\?v=|\/embed\/|\/shorts\/|\/)(\w+)

测试链接

https://youtu.be/YOUTUBE_ID?123
https://www.youtube.com/embed/YOUTUBE_ID?123
https://www.youtube.com/watch?v=YOUTUBE_ID?asd

https://youtu.be/YOUTUBE_ID&123
https://www.youtube.com/embed/YOUTUBE_ID&123
https://www.youtube.com/watch?v=YOUTUBE_ID&asd

https://youtu.be/YOUTUBE_ID/123
https://www.youtube.com/embed/YOUTUBE_ID/123
https://www.youtube.com/watch?v=YOUTUBE_ID/asd
https://youtube.com/shorts/YOUTUBE_ID?feature=share

请从这里检查您的测试用例

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

您不需要为此使用正则表达式。

var video_id = window.location.search.split('v=')[1];
var ampersandPosition = video_id.indexOf('&');
if(ampersandPosition != -1) {
  video_id = video_id.substring(0, ampersandPosition);
}

一个:

var id = url.match(/(^|=|\/)([0-9A-Za-z_-]{11})(\/|&|$|\?|#)/)[2]

它适用于此线程中显示的任何URL。

它不会工作时,YouTube添加一些其他参数与11个base64字符。在那之前,这是最简单的方法。