15

URLが有効なYouTubeビデオURLであるかどうかを確認し、そこからYouTubeビデオIDを取得しようとしていますが、これを実現するために単純なjavascript分割関数を使用していますが、YouTubeには複数のURLがあるため、これにはいくつかの小さな欠点があります。 。

私は他のstackoverflowスレッドを見てきましたが、それらはすべて、私が必要としているものではない1つの特定のURLしかサポートしていません。

これらすべてのURLに一致するものが必要です。

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

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

(オプションで、スクリプトがYouTubeビデオを含むかどうかを自動的に検出するその他の短縮URL)

ブラウザですばやく効率的に処理できるアイデアは大歓迎です!

4

7 に答える 7

53

これを試して:

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.
/
于 2012-05-14T21:52:42.397 に答える
8

たぶん、Youtube APIを見て、APIを介してURLを解析することでvideoIDを取得する方法があるかどうかを確認する必要があります。

このSOの投稿を見てください: YoutubeAPI-ビデオIDを抽出する

于 2012-05-14T21:54:39.587 に答える
5

これは迅速かもしれません:

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を持ちます。素早い。正規表現の方が優れています...しかし読みにくいです。両方を考慮してコードを変更しました。

于 2012-05-14T21:57:24.277 に答える
2

種類が多すぎます:

  • 最新の短い形式: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
  • any / subdomain / too: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 出典:正規表現を使用して文字列内のすべてのYouTubeビデオIDを見つけるにはどうすればよいですか?

最良の方法は、入力データを制限することです。

幸運を

于 2013-09-17T02:16:26.460 に答える
2

このコードを試してください

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.");
}

正規表現は、 YouTubeビデオID正規表現からのものです

于 2015-02-16T03:30:45.103 に答える
0

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;

于 2012-08-27T19:39:22.893 に答える
0

正規表現を使用せずにそれを行う簡単な方法を見つけました。

私はあなたのためにそれを行う関数を作りました:

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から「thumbnail_url」データを取得し、それに応じてサムネイルのURLを分割して、ビデオのIDを見つけます。

于 2021-05-03T16:41:37.660 に答える