URLからYouTubeビデオIDを取得するにはどうすればよいですか?


257

欲しい v=idJavaScriptを使用してYouTubeのURLから(jQueryなし、純粋なJavaScript)。

YouTube URL形式の例

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

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

または、URLに動画IDを含むその他のYouTube形式。

これらのフォーマットの結果

u8nQa1cJyX8



その質問は私の2番目のような形式のみです。しかし、私は興味深い答えを見つけました、それを共有してくれてありがとう。
Adam

そのための正規表現があります:http
//pregcopy.com/exp/27

それを信用することはできませんが、これはかなり広範囲にわたることがわかりました:gist.github.com/FinalAngel/1876898youtube.com/watch?feature=player_embedded&v=1p3vcRhsYGoyoutube.com/v/1p3vcRhsYGo
Simon

2
2015年現在:この回答にスキップしてください。他の答えは時代遅れです。
Lenar Hoyt、2015

回答:


109

これには正規表現を使用する必要はありません。

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 video_url = ' youtube.com/watch?v=eOrNdBpGMv8&feature=youtube_gdata '; ytid(video_url); function 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); } alert(video_id); video_idを返します。}
ジーノ

9
埋め込みURLを処理しない
Serge

14
'share'で生成されたURLも処理しませんhttps://youtu.be/{{video_id}}
hamncheez

2
この正規表現は、YouTube共有およびウォッチURLで適切に機能します。 url='https://youtu.be/{{video_id}}'; url.match(/(?:https?:\/{2})?(?:w{3}\.)?youtu(?:be)?\.(?:com|be)(?:\/watch\?v=|\/)([^\s&]+)/);
19

410

"jeffreypriebe"が提供するRegexを拡張しました。彼が必要としているのは、チャンネルを見ているときのビデオのURLである一種のYouTube 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


6
正規表現には小さなバグ\ ?? v?=?が含まれています これは監視部分にのみ存在する必要があります。そうでない場合、IDが「v」で始まる場合は「v」をフィルタリングします。これで/^.*((youtu.be\/)|(v\/)|(\/u\/\w\/)|(embed\/)|(watch\??v? =?))([^#\&\?] *)。* /
webstrap '16

69
よりすっきり:/.*(?:youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=)([^#\&\?]*).*/ 次に(match[1]代わりにmatch[7]少し恣意的に見えた)の代わりに使用します。WebDevによって指摘されたバグも修正します。
Chris Nolet、2012

3
YouTube IDが12文字になるまでどのくらいかかりますか?
Lenar Hoyt、2015

1
あなたは置けば、それは本当に完璧ではないことを知っていましたanything.com/watch?v=jn40gqhxoSYをそれはそれはユーチューブのURLだと思う
ジーノ

1
誰でもこのreqexを拡張できるので、不満を言う人には意味がありません。
Lecha Bisultanov

241

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


2
ただのヘッドアップ:これは、YouTubeのURLを扱っていることがわかっている場合にのみ使用してください。I(不当)これは合格例えば、偽陽性の原因となった、ユーチューブなどのURLを確認するためにそれを使用:「V / 2059-9080-5437」
ファビ

3
私は今、YouTubeドメインをチェックする別のRegexを使用しています。/^.*(youtu.be\/|youtube(-nocookie)?.com\/(v\/|.*u\/\wは大きな変更なので、答えを更新する必要があるかどうかわかりません。 \ / | embed \ / |。* v =))([\ w-] {11})。* /
マンティッシュ

4
YouTubeが動画IDを12文字に切り替えるのはいつですか?
Lenar Hoyt

「youtu.be」のドットをエスケープしてはいけませんか?
Alex

あなたは正しい@jitbitありがとう それは通常それをエスケープすることなく同様に動作しますが。
15年

85

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]);
}

2
上記のソリューションの多くはこの有効なURLの幅広いバッチに対応していないことに注意してください。テストスクリプトは非常に役立ちます。+ 1!
16年

2
これは「www.engadget.com/watch?v=dQw4w9WgXcQ」のようなものにだまされることに注意してください。ただし、問題になる可能性は高くありません
binaryfunt

動作しますが、複数のyoutubeのURLを含むテキストが原因で発生する問題を修正できませんでした。このregex101.com/r/qK5qJ5/1を参照してください。2番目のURLを置き換えることはできません。
アシシュ

2
あなたはその空のIDが一致したくない場合は^.*(?:(?:youtu\.be\/|v\/|vi\/|u\/\w\/|embed\/)|(?:(?:watch)?\?v(?:i)?=|\&v(?:i)?=))([^#\&\?]+).*(すなわちyoutube.com/watch?v=が一致しません)
zurfyx

「これらのどれもが台所の流しで機能しなかった」とはどういう意味ですか?
rmutalik

26
/^.*(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

この他の答えに触発されました。


9
^。*(?: youtu.be \ / | v \ / | e \ / | u \ / \ w + \ / | embed \ / | v =)([^#\&\?] *)。*グループ1の結果
2013

20

YouTubeにはさまざまなURLスタイルがあることを考えると、Regexの方が優れたソリューションだと思います。これが私の正規表現です:

^.*(youtu.be\/|v\/|embed\/|watch\?|youtube.com\/user\/[^#]*#([^\/]*?\/)*)\??v?=?([^#\&\?]*).*

グループ3にはYouTube IDがあります

サンプルYouTube URL(現在、「レガシー埋め込みURLスタイル」を含む)-上記の正規表現はそれらすべてで機能します。

http://www.youtube.com/v/0zM3nApSvMg?fs=1&amp;hl=en_US&amp;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/QdK8U-VIH_o

Lasnvへの帽子のヒント


9
あなたは本当にこれでドローイングボードに戻る必要があります。はい、上記のURLに正しく一致します。しかし、それはまた、誤って次のような多くの他の非ユーチューブ、URL文字列に一致します"domain.com/embed/file.txt""/tv/""Has anyone seen my watch?"。参照:より正確な解決策については、同様の質問に対する私の回答
ridgerunner 2011

1
上記の正規表現は「これはYouTubeのURLですか?」という質問には答えられません。しかし、それは私の目標ではありませんでした。YouTubeのURLを持っています-単にIDを抽出しています。はい、あなたの答えはしっかりしています(そして私のものではないユースケースをカバーしています)。
jeffreypriebe

上記と同じバグがあり、IDが「v」で始まる
webstrap

@WebDevに感謝-YouTubeがIDにavを入れる(またはIDを「v」で始める)かどうか知っていますか?
jeffreypriebe

1
現在も機能しています(2013-01-25)。これが実際に動作する例です:jsfiddle.net/bcmoney/yBP4J
bcmoney

17

YouTube、Soundcloud、またはVimeo埋め込みIDのユーザー入力をテストする関数を作成して、埋め込みメディアでより継続的なデザインを作成できるようにしました。この関数は、「type」と「id」の2つのプロパティを持つオブジェクトを検出して返します。タイプは「youtube」、「vimeo」、「soundcloud」のいずれかで、「id」プロパティは一意のメディアIDです。

サイトでは、textareaダンプを使用します。ユーザーは、vimeoとyoutubeの両方のiFrame埋め込みを含め、あらゆる種類のリンクや埋め込みコードを貼り付けることができます。

function testUrlForMedia(pastedData) {
var success = false;
var media   = {};
if (pastedData.match('http://(www.)?youtube|youtu\.be')) {
    if (pastedData.match('embed')) { youtube_id = pastedData.split(/embed\//)[1].split('"')[0]; }
    else { youtube_id = pastedData.split(/v\/|v=|youtu\.be\//)[1].split(/[?&]/)[0]; }
    media.type  = "youtube";
    media.id    = youtube_id;
    success = true;
}
else if (pastedData.match('http://(player.)?vimeo\.com')) {
    vimeo_id = pastedData.split(/video\/|http:\/\/vimeo\.com\//)[1].split(/[?&]/)[0];
    media.type  = "vimeo";
    media.id    = vimeo_id;
    success = true;
}
else if (pastedData.match('http://player\.soundcloud\.com')) {
    soundcloud_url = unescape(pastedData.split(/value="/)[1].split(/["]/)[0]);
    soundcloud_id = soundcloud_url.split(/tracks\//)[1].split(/[&"]/)[0];
    media.type  = "soundcloud";
    media.id    = soundcloud_id;
    success = true;
}
if (success) { return media; }
else { alert("No valid media id detected"); }
return false;
}

いいアイデアですが、ほとんどのURL形式では機能しません。どのhttpsサイトでも一致しないことを含みます。
NickG

13

ここではゲームに遅れましたが、mantishとjwからの2つの優れた応答をマッシュアップしました。まず、変更された正規表現:

const youtube_regex = /^.*(youtu\.be\/|vi?\/|u\/\w\/|embed\/|\?vi?=|\&vi?=)([^#\&\?]*).*/

テストコードは次のとおりです(mantishの元のテストケースをjwのより厄介なものに追加しました)。

 var urls = [
      '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',
      '//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 failures = 0;
  urls.forEach(url => {
    const parsed = url.match(youtube_regex);
    if (parsed && parsed[2]) {
      console.log(parsed[2]);
    } else {
      failures++;
      console.error(url, parsed);
    }
  });
  if (failures) {
    console.error(failures, 'failed');
  }

コメントに記載されているm.youtubeの URL を処理するための実験的なバージョン:

const youtube_regex = /^.*((m\.)?youtu\.be\/|vi?\/|u\/\w\/|embed\/|\?vi?=|\&vi?=)([^#\&\?]*).*/

テストの2つの場所でparsed[2]変更する必要がありparsed[3]ます(テストにm.youtubeURLを追加して渡す)。問題が発生した場合はお知らせください。


1
これは問題があり、正規表現で解決されたので、テストスーツに追加する必要があります:youtu.be/ve4f400859I。手紙vは私の以前の正規表現で削除されました
Mark Odey 2018

1
これhttp://youtu.be/を追加する/と、有効とマークされるため、誤認が発生します。使用(value) => /^.*(youtu\.be\/|vi?\/|u\/\w\/|embed\/|\?vi?=|\&vi?=)([^#\&\?]*).*/.test(value)
Anima-t3d 2018

コメントをありがとう。私の例はまだ更新していません(テストする時間がないため)。私のコードを使用している人は誰でも注意してください:-)
podperson

type = m.youtube.comのURLについてはどう
ですか

@MehulThakkarは、それ以外はyoutube.comのURLに似ていますか?
ポッドパーソン19/03/19

11

tl; dr。

この質問のすべてのURLの例に一致し、その後いくつかに一致します。

let re = /^(https?:\/\/)?((www\.)?(youtube(-nocookie)?|youtube.googleapis)\.com.*(v\/|v=|vi=|vi\/|e\/|embed\/|user\/.*\/u\/\d+\/)|youtu\.be\/)([_0-9a-z-]+)/i;
let id = "https://www.youtube.com/watch?v=l-gQLqv9f4o".match(re)[7];

IDは常に一致グループ7に含まれます。

この質問への回答から取得したすべてのURLのライブ例: https //regexr.com/3u0d4

完全な説明:

多くの回答/コメントが持ち上がっているので、YouTube動画のURLには多くの形式があります。「ホストされている」ように見える複数のTLDでも。

上記のregexrリンクをたどることにより、チェックしたバリエーションの完全なリストを見ることができます。

RegExpを分解してみましょう。

^文字列を文字列の先頭に固定します。 (https?:\/\/)?オプションのプロトコルhttp://またはhttps:// ?は、前の項目をオプションにするため、sグループ全体(括弧のセットで囲まれたもの)はオプションになります。

さて、この次の部分はそれの肉です。基本的に、www.youtube.com / ... [id]のさまざまなバージョンと、短縮されたyoutu.be/[id]バージョンのリンクの2つのオプションがあります。

(                                                  // Start a group which will match everything after the protocol and up to just before the video id.
  (www\.)?                                         // Optional www.
  (youtube(-nocookie)?|youtube.googleapis)         // There are three domains where youtube videos can be accessed. This matches them.
  \.com                                            // The .com at the end of the domain. 
  .*                                               // Match anything 
  (v\/|v=|vi=|vi\/|e\/|embed\/|user\/.*\/u\/\d+\/) // These are all the things that can come right before the video id. The | character means OR so the first one in the "list" matches.
  |                                                // There is one more domain where you can get to youtube, it's the link shortening url which is just followed by the video id. This OR separates all the stuff in this group and the link shortening url.
  youtu\.be\/                                      // The link shortening domain
)                                                  // End of group

最後に、ビデオIDを選択するグループがあります。数字、文字、アンダースコア、またはダッシュである少なくとも1つの文字。

([_0-9a-z-]+)

regexrリンクに移動し、式の各部分がURLのテキストとどのように一致するかを確認することにより、正規表現の各部分の詳細を確認できます。


10

私が見つけた(2019-2020からの)最良の解決策はそれです:

function YouTubeGetID(url){
   url = url.split(/(vi\/|v=|\/v\/|youtu\.be\/|\/embed\/)/);
   return (url[2] !== undefined) ? url[2].split(/[^0-9a-z_\-]/i)[0] : url[0];
}

ここで見つけ

/*
* Tested URLs:
var url = 'http://youtube.googleapis.com/v/4e_kz79tjb8?version=3';
url = 'https://www.youtube.com/watch?feature=g-vrec&v=Y1xs_xPb46M';
url = 'http://www.youtube.com/watch?feature=player_embedded&v=Ab25nviakcw#';
url = 'http://youtu.be/Ab25nviakcw';
url = 'http://www.youtube.com/watch?v=Ab25nviakcw';
url = '<iframe width="420" height="315" src="http://www.youtube.com/embed/Ab25nviakcw" frameborder="0" allowfullscreen></iframe>';
url = '<object width="420" height="315"><param name="movie" value="http://www.youtube-nocookie.com/v/Ab25nviakcw?version=3&amp;hl=en_US"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube-nocookie.com/v/Ab25nviakcw?version=3&amp;hl=en_US" type="application/x-shockwave-flash" width="420" height="315" allowscriptaccess="always" allowfullscreen="true"></embed></object>';
url = 'http://i1.ytimg.com/vi/Ab25nviakcw/default.jpg';
url = 'https://www.youtube.com/watch?v=BGL22PTIOAM&feature=g-all-xit';
url = 'BGL22PTIOAM';
*/

TypeScript:const youTubeGetID =(url:string)=> {const [a、、b] = url .replace(/(> | <)/ gi、 '').split(/(vi \ / | v = | \ /v\/|youtu\.be\/|\/embed\/)/); if(b!== undefined){return b.split(/ [^ 0-9a-z _-] / i)[0]; } else {return a; }};
Vlad

v = nfDGK_WSFroで失敗
Deen John

6

YouTube動画IDは11文字に設定されているためsubstring、URLをで分割した直後にできv=ます。その後、最後のアンパサンドに依存しません。

var sampleUrl = "http://www.youtube.com/watch?v=JcjoGn6FLwI&asdasd";

var video_id = sampleUrl.split("v=")[1].substring(0, 11)

素敵でシンプル:)


これは文字通り、受け入れられた回答の複製です
ブラソフィロ2018

5

私はすべての提案を要約しました、そしてこれがこの質問に対する普遍的で短い答えです:

if(url.match('http://(www.)?youtube|youtu\.be')){
    youtube_id=url.split(/v\/|v=|youtu\.be\//)[1].split(/[?&]/)[0];
}

5

Javaコード:(すべてのURLで機能します:

  1. http://www.youtube.com/watch?v=0zM3nApSvMg&feature=feedrec_grec_index
  2. http://www.youtube.com/user/IngridMichaelsonVEVO#p/a/u/1/QdK8U-VIH_o
  3. http://youtube.googleapis.com/v/0zM3nApSvMg?fs=1&hl=en_US&rel=0
  4. http://www.youtube.com/watch?v=0zM3nApSvMg#t=0m10s
  5. http://www.youtube.com/embed/0zM3nApSvMg?rel=0 "
  6. http://www.youtube.com/watch?v=0zM3nApSvMg
  7. http://youtu.be/0zM3nApSvMg
  8. http://www.youtube.com/watch?v=0zM3nApSvMg/
  9. http://www.youtube.com/watch?feature=player_detailpage&v=8UVNT4wvIGY

    String url = "http://www.youtube.com/watch?v=0zM3nApSvMg&feature=feedrec_grec_index";

    String regExp = "/.*(?:youtu.be\\/|v\\/|u/\\w/|embed\\/|watch\\?.*&?v=)";
    Pattern compiledPattern = Pattern.compile(regExp);
    Matcher matcher = compiledPattern.matcher(url);
    if(matcher.find()){
        int start = matcher.end();
        System.out.println("ID : " + url.substring(start, start+11));

    }

DailyMotionの場合:

String url = "http://www.dailymotion.com/video/x4xvnz_the-funny-crash-compilation_fun";

    String regExp = "/video/([^_]+)/?";
    Pattern compiledPattern = Pattern.compile(regExp);
    Matcher matcher = compiledPattern.matcher(url);
    if(matcher.find()){
        String match = matcher.group();
        System.out.println("ID : " + match.substring(match.lastIndexOf("/")+1));

    }

1
JavaScriptコードのRegexパターンの前後の二重引用符を削除すると、機能します。
TheDude、2016年

4

少し厳密なバージョン:

^https?://(?:www\.)?youtu(?:\.be|be\.com)/(?:\S+/)?(?:[^\s/]*(?:\?|&)vi?=)?([^#?&]+)

テスト済み:

http://www.youtube.com/user/dreamtheater#p/u/1/oTJRivZTMLs
https://youtu.be/oTJRivZTMLs?list=PLToa5JuFMsXTNkrLJbRlB--76IAOjRM9b
http://www.youtube.com/watch?v=oTJRivZTMLs&feature=youtu.be
https://youtu.be/oTJRivZTMLs
http://youtu.be/oTJRivZTMLs&feature=channel
http://www.youtube.com/ytscreeningroom?v=oTJRivZTMLs
http://www.youtube.com/embed/oTJRivZTMLs?rel=0
http://youtube.com/v/oTJRivZTMLs&feature=channel
http://youtube.com/v/oTJRivZTMLs&feature=channel
http://youtube.com/vi/oTJRivZTMLs&feature=channel
http://youtube.com/?v=oTJRivZTMLs&feature=channel
http://youtube.com/?feature=channel&v=oTJRivZTMLs
http://youtube.com/?vi=oTJRivZTMLs&feature=channel
http://youtube.com/watch?v=oTJRivZTMLs&feature=channel
http://youtube.com/watch?vi=oTJRivZTMLs&feature=channel

4

次のコードを使用して、URLからYouTube動画IDを取得できます。

url = "https://www.youtube.com/watch?v=qeMFqkcPYcg"
VID_REGEX = /(?:youtube(?:-nocookie)?\.com\/(?:[^\/\n\s]+\/\S+\/|(?:v|e(?:mbed)?)\/|\S*?[?&]v=)|youtu\.be\/)([a-zA-Z0-9_-]{11})/
alert(url.match(VID_REGEX)[1]);

他のすべての正規表現の例で問題がありましたが、これはデスクトップの人々が使用する3つの共有オプションで効果的に機能します。アドレスバーのURL、共有ボタンのURL、インライン共有ボタンのURL。ありがとう!!!
Maarten

2

投稿されたものから少し変更されたバージョン:

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で使用していますが、{11,11}がJavaScriptでサポートされているかどうかはわかりません。&v = ....のサポートも追加(念のため)


これは私がテストしているURLで機能した唯一のものでした: youtube.com/watch
ドミニク

完璧。@Josha 69リンクの組み合わせに感謝します。
gokhan 2014年


2

もう一つ:

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

これは、このスレッドに表示されるすべてのURLで機能します。

YouTubeが11個のbase64文字を含む他のパラメーターを追加した場合は機能しません。それまでは簡単な方法です。


2

以下に表示されているYouTubeのURLからビデオIDを抽出する小さな関数を作成しました。

var videoId = function(url) {
   var match = url.match(/v=([0-9a-z_-]{1,20})/i);
   return (match ? 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'));

この関数は、URLに複数のパラメーターがある場合でも、ビデオIDを抽出します。


2

これは、あらゆるタイプのYouTubeリンクからビデオIDを取得できます

var url= 'http://youtu.be/0zM3nApSvMg';
var urlsplit= url.split(/^.*(youtu.be\/|v\/|embed\/|watch\?|youtube.com\/user\/[^#]*#([^\/]*?\/)*)\??v?=?([^#\&\?]*).*/);
console.log(urlsplit[3]);

1

私はスーリヤの答えが好きでした..それがうまくいかない場合...

String regExp = "/.*(?:youtu.be\\/|v\\/|u/\\w/|embed\\/|watch\\?.*&?v=)";

機能しない

youtu.be/i4fjHzCXg6c  and  www.youtu.be/i4fjHzCXg6c

更新版:

String regExp = "/?.*(?:youtu.be\\/|v\\/|u/\\w/|embed\\/|watch\\?.*&?v=)";

すべてのために働く。


1

これを試してください-

function getYouTubeIdFromURL($url) 
{
  $pattern = '/(?:youtube.com/(?:[^/]+/.+/|(?:v|e(?:mbed)?)/|.*[?&]v=)|youtu.be/)([^"&?/ ]{11})/i';
  preg_match($pattern, $url, $matches);

  return isset($matches[1]) ? $matches[1] : false;
}

1

Lasnv回答のクリスノレットクリーナーの例は非常に良いですが、YouTubeリンクをテキストで見つけて、YouTubeのURLの後にランダムなテキストを挿入しようとすると、正規表現が必要以上に一致することがわかりました。改良されたChris Noletの回答:

/^.*(?:youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=)([^#\&\?]{11,11}).*/


1
function parser(url){
    var regExp = /^.*((youtu.be\/)|(v\/)|(\/u\/\w\/)|(embed\/)|(watch\/)|(\?v=|\&v=))([^#\&\?]*).*/;
    var match = url.match(regExp);
    if (match && match[8].length==11){
            alert('OK');
    }else{
            alert('BAD');
    }
}

検査用の:

https://www.youtube.com/embed/vDoO_bNw7fc - attention first symbol «v» in «vDoO_bNw7fc»

http://www.youtube.com/user/dreamtheater#p/u/1/oTJRivZTMLs
https://youtu.be/oTJRivZTMLs?list=PLToa5JuFMsXTNkrLJbRlB--76IAOjRM9b
http://www.youtube.com/watch?v=oTJRivZTMLs&feature=youtu.be
https://youtu.be/oTJRivZTMLs
http://youtu.be/oTJRivZTMLs&feature=channel
http://www.youtube.com/ytscreeningroom?v=oTJRivZTMLs
http://www.youtube.com/embed/oTJRivZTMLs?rel=0
http://youtube.com/v/oTJRivZTMLs&feature=channel
http://youtube.com/v/oTJRivZTMLs&feature=channel
http://youtube.com/vi/oTJRivZTMLs&feature=channel
http://youtube.com/?v=oTJRivZTMLs&feature=channel
http://youtube.com/?feature=channel&v=oTJRivZTMLs
http://youtube.com/?vi=oTJRivZTMLs&feature=channel
http://youtube.com/watch?v=oTJRivZTMLs&feature=channel
http://youtube.com/watch?vi=oTJRivZTMLs&feature=channel

0

さて、単純な解析でそれを行う方法は、最初の=記号の後に開始してすべてを最初の記号に取得することです。

私は彼らがここで同様の答えを持っていたと思います:

JavaScriptを使用してVimeo IDを解析していますか?


2
また、URLに含まれていない場合はどうなります&か?
Adam

次に、同等の区切り文字を見つける必要があります。たとえば、最初に指定したURLは&記号です。2番目のURLでは、文字列の終わりが区切り文字です。
karlphillip 2010

0

これらの文字「?v =」は1つ以上表示できませんが、「v」はなんらかの方法でId Itselfに表示できるため、「?v =」を区切り文字として使用します。ここ働く

//Get YouTube video Id From Its Url

     $('button').bind('click',function(){
var 
url='http://www.youtube.com/watch?v=u8nQa1cJyX8',
videoId = url.split('?v='),//Split data to two
YouTubeVideoId=videoId[1];
alert(YouTubeVideoId);return false;

});

<button>Click ToGet VideoId</button>

0

完全なURLがある場合は、単純な正規表現を使用してください。

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

0
var video_url = document.getElementById('youtubediv').value;
        if(video_url!=""){
        ytid(video_url);
        document.getElementById("youtube").setAttribute("src","http://www.youtube.com/embed/"+ytid(video_url));
        }
        function 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);
            }
            return video_id;
        }

それが役に立てば幸い


0
function youtube_parser(url){
    var match = url.match(/^.*((youtu.be\/)|(v\/)|(\/u\/\w\/)|(embed\/)|(watch\?))\??v?=?([^#\&\?]*).*/);
    return (match&&match[7].length==11)?match[7]:false;
}

最短かつ効率的


ない権利、対失敗youtube.com/e/dQw4w9WgXcQので、効率的な部分を:)取り出してください
alecellis1985

0

コメントで言及されたウェブストラップとして:

ビデオが「v」で始まり、youtu.beからのものである場合に機能しました

正規表現には小さなバグが含まれていますが、\??v?=?これは監視部分にあるはずです。それ以外の'v'場合、IDがで始まる場合 はをフィルタリングします'v'。これでうまくいくはずです

/^.*((youtu.be\/)|(v\/)|(\/u\/\w\/)|(embed\/)|(watch\??v?=?))([^#\&\?]*).*/

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.