我想要得到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
我想要得到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
当前回答
一个:
var id = url.match(/(^|=|\/)([0-9A-Za-z_-]{11})(\/|&|$|\?|#)/)[2]
它适用于此线程中显示的任何URL。
它不会工作时,YouTube添加一些其他参数与11个base64字符。在那之前,这是最简单的方法。
其他回答
这是一个稍作改动的版本:
var regExp = /^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|\&v=)([^#\&\?]{11,11}).*/;
var match = url.match(regExp);
if (match) if (match.length >= 2) return match[2];
// error
这假设代码总是11个字符。 我在ActionScript中使用这个,不确定在Javascript中是否支持{11,11}。还增加了对&v=....的支持(以防万一)
/^https?:\/\/(?:(?:youtu\.be\/)|(?:(?:www\.)?youtube\.com\/(?:(?:watch\?(?:[^&]+&)?vi?=)|(?:vi?\/)|(?:shorts\/))))([a-zA-Z0-9_-]{11,})/i
下面是一个优化的正则表达式,它可以找到视频id,并准确地遵循YouTube oEmbed对embed url的定义。您可以在这里看到我与测试url的匹配:https://regex101.com/r/q4mWg1/1
它故意不匹配协议相对url(//而不是https://)和youtu-nocookie.com url,因为这些不在oEmbed定义中,从而降低了性能。
你可以在这里查看oEmbed规范: https://oembed.com/
官方提供商的定义,包括YouTube的定义,在这里:https://oembed.com/providers.json
我发现这在Wordpress网站上非常有用,我需要在帖子内容中匹配oEmbed url。
试试NPM包youtube-id
测试在不同的网址:
const tested = [
'https://www.youtube.com/watch?v={YOUTUBE_ID}&nohtml5=False',
'https://youtu.be/{YOUTUBE_ID}',
'www.youtube.com/embed/{YOUTUBE_ID}'
// ....
]
一个:
var id = url.match(/(^|=|\/)([0-9A-Za-z_-]{11})(\/|&|$|\?|#)/)[2]
它适用于此线程中显示的任何URL。
它不会工作时,YouTube添加一些其他参数与11个base64字符。在那之前,这是最简单的方法。
videoId = videoUrl.split('v=')[1].substring(0,11);