如何从 URL 获取 YouTube 视频 ID?

IT技术 javascript regex url youtube
2021-02-02 16:05:10

我想v=id使用 JavaScript(没有 jQuery,纯 JavaScript)从 YouTube 的 URL 中获取

YouTube URL 格式示例

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

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

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

这些格式的结果

u8nQa1cJyX8

6个回答

我对“jeffreypriebe”提供的正则表达式进行了增强,因为他需要一种 YouTube URL,即视频在浏览频道时的 URL。

嗯,不,但这是我武装的功能。

<script type="text/javascript">
function youtube_parser(url){
    var regExp = /^.*((youtu.be\/)|(v\/)|(\/u\/\w\/)|(embed\/)|(watch\?))\??v?=?([^#&?]*).*/;
    var match = url.match(regExp);
    return (match&&match[7].length==11)? match[7] : false;
}
</script>

这些是支持的 URL 类型

http://www.youtube.com/watch?v=0zM3nApSvMg&feature=feedrec_grec_index
http://www.youtube.com/user/IngridMichaelsonVEVO#p/a/u/1/QdK8U-VIH_o
http://www.youtube.com/v/0zM3nApSvMg?fs=1&amp;hl=en_US&amp;rel=0
http://www.youtube.com/watch?v=0zM3nApSvMg#t=0m10s
http://www.youtube.com/embed/0zM3nApSvMg?rel=0
http://www.youtube.com/watch?v=0zM3nApSvMg
http://youtu.be/0zM3nApSvMg

可以在[http://web.archive.org/web/20160926134334/] http://lasnv.net/foro/839/Javascript_parsear_URL_de_YouTube 中找到

你意识到这个正则表达式实际上甚至没有检查域;它是如此宽容以至于字符串“v/2g5jg1Q2e6k”足以匹配它。
2021-04-05 16:05:10
更干净:/.*(?:youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=)([^#\&\?]*).*/ 然后使用match[1]而不是match[7](这对我来说似乎有点武断)。还修复了 WebDev 指出的错误。
2021-04-06 16:05:10
任何人都可以扩展这个 reqex,因此人们抱怨没有任何意义。
2021-04-06 16:05:10
正则表达式包含一个小错误 \??v?=? 这应该只是在手表部分,否则如果 id 以“v”开头,您将过滤“v”。所以这应该可以解决问题 /^.*((youtu.be\/)|(v\/)|(\/u\/\w\/)|(embed\/)|(watch\??v? =?))([^#\&\?]*).*/
2021-04-08 16:05:10
YouTube ID 的长度为 12 个字符需要多长时间?
2021-04-09 16:05:10

我稍微简化了 Lasnv 的回答。

它还修复了 WebDeb 描述的错误。

这里是:

var regExp = /^.*(youtu\.be\/|v\/|u\/\w\/|embed\/|watch\?v=|\&v=)([^#\&\?]*).*/;
var match = url.match(regExp);
if (match && match[2].length == 11) {
  return match[2];
} else {
  //error
}

这是一个可以使用的正则表达式链接:http ://regexr.com/3dnqv

你是对的@jitbit 谢谢。虽然它通常也能正常工作而不会逃避它。
2021-03-15 16:05:10
“youtu.be”中的点不应该被转义吗?
2021-03-20 16:05:10
YouTube 何时将视频 ID 切换为 12 个字符?
2021-03-24 16:05:10
我现在使用不同的正则表达式,它也检查 youtube 域。我不确定是否应该更新答案,因为这是一个很大的变化:/^.*(youtu.be\/|youtube(-nocookie)?.com\/(v\/|.*u\/\w \/|嵌入\/|.*v=))([\w-]{11}).*/
2021-03-26 16:05:10
提醒一下:这应该只在您知道您正在处理 youtube 网址时使用。我(错误地)用它来验证 url 为 youtube,这导致了误报,例如通过:'v/2059-9080-5437'
2021-04-08 16:05:10

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

var video_id = window.location.search.split('v=')[1];
var ampersandPosition = video_id.indexOf('&');
if(ampersandPosition != -1) {
  video_id = video_id.substring(0, ampersandPosition);
}
此正则表达式适用于 youtube 共享和观看网址。 url='https://youtu.be/{{video_id}}'; url.match(/(?:https?:\/{2})?(?:w{3}\.)?youtu(?:be)?\.(?:com|be)(?:\/watch\?v=|\/)([^\s&]+)/);
2021-03-12 16:05:10
不处理嵌入的 URL
2021-03-20 16:05:10
也不处理“共享”生成的网址- https://youtu.be/{{video_id}}
2021-04-01 16:05:10
这是一个有用的功能,可以根据此代码使其在您想要的地方工作。var video_url = ' youtube.com/watch?v=eOrNdBpGMv8&feature=youtube_gdata '; ytid(video_url); 函数 ytid(video_url) { var video_id = video_url.split('v=')[1]; var ampersandPosition = video_id.indexOf('&'); if (ampersandPosition != -1) { video_id = video_id.substring(0,ampersandPosition); } 警报(video_id);返回 video_id; }
2021-04-05 16:05:10

截至 2015 年 1 月 1 日,这些都不适用于厨房水槽,特别是没有 http/s 协议和 youtube-nocookie 域的 URL。所以这是一个适用于所有这些不同 Youtube 版本的修改版本:

// Just the regex. Output is in [1].
/^.*(?:(?:youtu\.be\/|v\/|vi\/|u\/\w\/|embed\/)|(?:(?:watch)?\?v(?:i)?=|\&v(?:i)?=))([^#\&\?]*).*/

// For testing.
var urls = [
    '//www.youtube-nocookie.com/embed/up_lNV-yoK4?rel=0',
    'http://www.youtube.com/user/Scobleizer#p/u/1/1p3vcRhsYGo',
    'http://www.youtube.com/watch?v=cKZDdG9FTKY&feature=channel',
    'http://www.youtube.com/watch?v=yZ-K7nCVnBI&playnext_from=TL&videos=osPknwzXEas&feature=sub',
    'http://www.youtube.com/ytscreeningroom?v=NRHVzbJVx8I',
    'http://www.youtube.com/user/SilkRoadTheatre#p/a/u/2/6dwqZw0j_jY',
    'http://youtu.be/6dwqZw0j_jY',
    'http://www.youtube.com/watch?v=6dwqZw0j_jY&feature=youtu.be',
    'http://youtu.be/afa-5HQHiAs',
    'http://www.youtube.com/user/Scobleizer#p/u/1/1p3vcRhsYGo?rel=0',
    'http://www.youtube.com/watch?v=cKZDdG9FTKY&feature=channel',
    'http://www.youtube.com/watch?v=yZ-K7nCVnBI&playnext_from=TL&videos=osPknwzXEas&feature=sub',
    'http://www.youtube.com/ytscreeningroom?v=NRHVzbJVx8I',
    'http://www.youtube.com/embed/nas1rJpm7wY?rel=0',
    'http://www.youtube.com/watch?v=peFZbP64dsU',
    'http://youtube.com/v/dQw4w9WgXcQ?feature=youtube_gdata_player',
    'http://youtube.com/vi/dQw4w9WgXcQ?feature=youtube_gdata_player',
    'http://youtube.com/?v=dQw4w9WgXcQ&feature=youtube_gdata_player',
    'http://www.youtube.com/watch?v=dQw4w9WgXcQ&feature=youtube_gdata_player',
    'http://youtube.com/?vi=dQw4w9WgXcQ&feature=youtube_gdata_player',
    'http://youtube.com/watch?v=dQw4w9WgXcQ&feature=youtube_gdata_player',
    'http://youtube.com/watch?vi=dQw4w9WgXcQ&feature=youtube_gdata_player',
    'http://youtu.be/dQw4w9WgXcQ?feature=youtube_gdata_player'
];

var i, r, rx = /^.*(?:(?:youtu\.be\/|v\/|vi\/|u\/\w\/|embed\/)|(?:(?:watch)?\?v(?:i)?=|\&v(?:i)?=))([^#\&\?]*).*/;

for (i = 0; i < urls.length; ++i) {
    r = urls[i].match(rx);
    console.log(r[1]);
}
请注意,这会被诸如“www.engadget.com/watch?v=dQw4w9WgXcQ”之类的东西所迷惑,尽管这可能不是问题
2021-03-11 16:05:10
如果您不希望空 ID 匹配:(^.*(?:(?:youtu\.be\/|v\/|vi\/|u\/\w\/|embed\/)|(?:(?:watch)?\?v(?:i)?=|\&v(?:i)?=))([^#\&\?]+).*youtube.com/watch?v=将不匹配)
2021-03-16 16:05:10
它有效,但无法解决出现带有多个 youtube 网址的文本的问题,请参阅此regex101.com/r/qK5qJ5/1它不应该替换第二个 url。
2021-03-19 16:05:10
值得注意的是,上述许多解决方案都没有涵盖这一大批量的有效网址,测试脚本非常有帮助,+1!
2021-03-21 16:05:10
“这些都没有在厨房水槽上工作”是什么意思?
2021-03-25 16:05:10
/^.*(youtu.be\/|v\/|e\/|u\/\w+\/|embed\/|v=)([^#\&\?]*).*/

测试:

  • http://www.youtube.com/v/0zM3nApSvMg?fs=1&hl=en_US&rel=0
  • http://www.youtube.com/embed/0zM3nApSvMg?rel=0
  • http://www.youtube.com/watch?v=0zM3nApSvMg&feature=feedrec_grec_index
  • http://www.youtube.com/watch?v=0zM3nApSvMg
  • http://youtu.be/0zM3nApSvMg
  • http://www.youtube.com/watch?v=0zM3nApSvMg#t=0m10s
  • http://www.youtube.com/user/IngridMichaelsonVEVO#p/a/u/1/KdwsulMb8EQ
  • http://youtu.be/dQw4w9WgXcQ
  • http://www.youtube.com/embed/dQw4w9WgXcQ
  • http://www.youtube.com/v/dQw4w9WgXcQ
  • http://www.youtube.com/e/dQw4w9WgXcQ
  • http://www.youtube.com/watch?v=dQw4w9WgXcQ
  • http://www.youtube.com/?v=dQw4w9WgXcQ
  • http://www.youtube.com/watch?feature=player_embedded&v=dQw4w9WgXcQ
  • http://www.youtube.com/?feature=player_embedded&v=dQw4w9WgXcQ
  • http://www.youtube.com/user/IngridMichaelsonVEVO#p/u/11/KdwsulMb8EQ
  • http://www.youtube-nocookie.com/v/6L3ZvIMwZFM?version=3&hl=en_US&rel=0

受到另一个答案的启发

^.*(?:youtu.be\/|v\/|e\/|u\/\w+\/|embed\/|v=)([^#\&\?]*).* 会给你是第 1 组的结果
2021-03-16 16:05:10