Javascript 如何从url获取youtube视频id

Javascript 如何从url获取youtube视频id,javascript,jquery,youtube,Javascript,Jquery,Youtube,我试图检查一个url是否是有效的youtube视频url,并从中获取youtube视频ID,到目前为止,我使用了一个简单的javascript拆分函数来实现这一点,但是这有一些小缺点,因为youtube有多个url 我一直在查看其他stackoverflow线程,但是它们都只支持一个特定的URL,这不是我需要的 我需要与所有这些URL匹配的内容: http(s)://www.youtu.be/videoID http(s)://www.youtube.com/watch?v=videoID (以

我试图检查一个url是否是有效的youtube视频url,并从中获取youtube视频ID,到目前为止,我使用了一个简单的javascript拆分函数来实现这一点,但是这有一些小缺点,因为youtube有多个url

我一直在查看其他stackoverflow线程,但是它们都只支持一个特定的URL,这不是我需要的

我需要与所有这些URL匹配的内容:

http(s)://www.youtu.be/videoID

http(s)://www.youtube.com/watch?v=videoID

(以及脚本自动检测是否包含youtube视频的任意其他短URL)

非常感谢任何可以通过浏览器快速/高效处理的想法

试试这个:

var url = "...";
var videoid = url.match(/(?:https?:\/{2})?(?:w{3}\.)?youtu(?:be)?\.(?:com|be)(?:\/watch\?v=|\/)([^\s&]+)/);
if(videoid != null) {
   console.log("video id = ",videoid[1]);
} else { 
    console.log("The youtube url is not valid.");
}
见正则表达式:

/
(?:https?:\/{2})? // Optional protocol, if have, must be http:// or https://
(?:w{3}\.)?      // Optional sub-domain, if have, must be www.
youtu(?:be)?  // The domain. Match 'youtu' and optionally 'be'. 
\.(?:com|be) // the domain-extension must be .com or .be
(?:\/watch\?v=|\/)([^\s&]+) //match the value of 'v' parameter in querystring from 'watch' directory OR after root directory, any non-space value.
/

也许你应该看看Youtube API,看看是否有办法通过API解析URL来获取视频ID

看看这篇文章: 这可能很快:

var url = 'http://www.youtu.be/543221'; 
         //http://www.youtube.com/watch?v=SNfYz6Yw0W8&feature=g-all-esi would work also
var a = url.split("v=")[1];
a = a != undefined ? a : url.split("youtu.be/")[1];
b = a.split("&")[0];

变量c将具有您的id。Quick。正则表达式更好。。。但是读起来更难。我已经修改了我的代码来解释这两种情况

您可以使用preg_match轻松完成此操作,例如:
$url=”http://www.youtube.com/watch?v=YzOt12co4nk&feature=g-vrec”;
preg_match('/v=([0-9a-zA-Z]+)/',$url,$matches);
$vid=$matches[1];


现在您的视频id为:$vid=YzOt12co4nk

种类太多了:

  • 最新短格式:
    http://youtu.be/NLqAF9hrVbY
  • iframe:
    http://www.youtube.com/embed/NLqAF9hrVbY
  • iframe(安全):
    https://www.youtube.com/embed/NLqAF9hrVbY
  • 对象参数:
    http://www.youtube.com/v/NLqAF9hrVbY?fs=1&hl=en_US
  • 对象嵌入:
    http://www.youtube.com/v/NLqAF9hrVbY?fs=1&hl=en_US
  • 监视:
    http://www.youtube.com/watch?v=NLqAF9hrVbY
  • 用户:
    http://www.youtube.com/user/Scobleizer#p/u/1/1p3vcRhsYGo
  • ytscreeningroom:
    http://www.youtube.com/ytscreeningroom?v=NRHVzbJVx8I
  • 任何事都可以<代码>http://www.youtube.com/sandalsResorts#p/c/54B8C800269D7C1B/2/PPS-8DMrAn4
  • 任何/子域/太:
    http://gdata.youtube.com/feeds/api/videos/NLqAF9hrVbY
  • 更多参数:
    http://www.youtube.com/watch?v=spDj54kf-vY&feature=g-vrec
  • 查询可能有点:
    http://www.youtube.com/watch?v=spDj54kf-vY&feature=youtu.be
    (来源:)
最好的方法是限制输入数据

祝你好运

试试这段代码

var url = "...";
var videoid = url.match((?:youtube(?:-nocookie)?\.com\/(?:[^\/\n\s]+\/\S+\/|(?:v|e(?:mbed)?)\/|\S*?[?&]v=)|youtu\.be\/)([a-zA-Z0-9_-]{11}));
if(videoid != null) {
    console.log("video id = ",videoid[1]);
} else { 
    console.log("The youtube url is not valid.");
}
正则表达式来自

我找到了一种不使用正则表达式的简单方法

我为你做了一个函数:

function getLink(url){
    fetch('www.youtube.com/oembed?url=' + url).then(res => {
     var thumbnailUrl = res.thumbnail_url;
     var id = thumbnail_url.split('vi/')[1].substring(0, 11);
     return id;}
      )
}

console.log(getLink(your_url));
// here replace 'your_url' with your specified youtube url.

所有这些都是使用youtube api并将您的url作为参数传递的,youtube负责url的类型,所以您不必担心它。接下来,该函数从该api获取“缩略图url”数据,然后相应地分割缩略图的url以查找视频的ID。

编辑了我的问题,我还需要检查URL是否是有效的youtube视频我使用这些功能的可能副本:youtube短URL是youtu。在这种情况下正则表达式是什么样子的?@xorinzor:我添加了一个简单的正则表达式解释。你能举个例子说明这个URL是如何产生的吗?人们是如何编写这个冗长的正则表达式的?这个URL“确实如此”我想要的是,但是掩码是第一个,因此我将他的回答标记为答案+1,以指出存在的问题和该网站提供的API。这正是其他线程也有的,但是我需要验证youtu.be URL,请现在检查我的代码。再多一行代码就足够简单,可以检查您要查找的内容。我认为它仍然比正则表达式更具可读性。然而,我同意正则表达式更好。然而,由于很多人不讲正则表达式,这种方式可能会使youtube下次添加其他url格式时更容易更新。尽管问题已经得到了回答,但请注意这是关于Javascript/JQuery解决方案的,而不是PHP;感谢您的贡献。此解决方案适用于您的所有URL