मुझे URL से YouTube वीडियो आईडी कैसे मिलेगी?


256

मैं v=idजावास्क्रिप्ट (कोई jQuery, शुद्ध जावास्क्रिप्ट) के साथ YouTube के URL से प्राप्त करना चाहता हूं ।

उदाहरण के लिए YouTube URL प्रारूप

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

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

या कोई अन्य YouTube प्रारूप जिसमें URL में एक वीडियो आईडी है।

इन स्वरूपों से परिणाम

u8nQa1cJyX8



यह प्रश्न केवल मेरे दूसरे प्रारूप जैसे प्रारूपों के लिए है। लेकिन मुझे वहां एक दिलचस्प जवाब मिला, इसे साझा करने के लिए धन्यवाद।
एडम

इसके लिए एक नियमित अभिव्यक्ति हैं: http://pregcopy.com/exp/27
Exos

इसका कोई श्रेय नहीं ले सकते, लेकिन मुझे यह बहुत व्यापक लगा: gist.github.com/FinalAngel/1876898 । यह url को youtube.com/watch?feature=player_embedded&v=1p3vcRhsYGo और youtube.com/v/1p3vcRhsYGo
साइमन

2
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); } सतर्क (वीडियो_ड); वापसी video_id; }
गीनो

9
एम्बेडेड URL को हैंडल नहीं करता है
सर्ज

14
यह भी 'साझा' जनरेट किए गए url-https://youtu.be/{{video_id}}
हैम्न्चेज़ को

2
यह regex youtube शेयर और वॉच url के साथ अच्छा काम करता है। url='https://youtu.be/{{video_id}}'; url.match(/(?:https?:\/{2})?(?:w{3}\.)?youtu(?:be)?\.(?:com|be)(?:\/watch\?v=|\/)([^\s&]+)/);
डिप्टेन

410

मैंने "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 में पाया जा सकता है


6
रेगेक्स में थोड़ा बग \ _ v? = होता है? यह सिर्फ घड़ी के हिस्से में होना चाहिए, अन्यथा यदि आप 'v' से शुरू करते हैं तो आप 'v' को फ़िल्टर करेंगे। तो यह ट्रिक करना चाहिए />.* /(youtu.be\/).net(v\/).net(\/u\/\w\/).net(embed\/).html(watch\??v? =?)) ([^ # \ _ \ _? * *)। * /
webstrap

69
यहां तक ​​कि क्लीनर: /.*(?:youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=)([^#\&\?]*).*/ इसके match[1]बजाय का उपयोग करें match[7](जो मुझे थोड़ा मनमाना लग रहा था)। इसके अलावा WebDev द्वारा इंगित बग को ठीक करता है।
क्रिस नोलेट

3
YouTube ID कब तक 12 वर्ण की है?
लेनार होयट

1
क्या आप जानते हैं कि यह वास्तव में एकदम सही नहीं है, अगर आप कुछ भी डालते हैं
Gino

1
कोई भी इस reexex का विस्तार कर सकता है और इस प्रकार शिकायत करने वाले लोगों को कोई मतलब नहीं है।
लेचा बिसुल्तानोव

241

मैंने लसनव के उत्तर को थोड़ा सरल किया।

यह वेबडब का वर्णन करने वाले बग को भी ठीक करता है।

यह रहा:

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
}

यहाँ के साथ खेलने के लिए एक regexer लिंक है: http://regexr.com/3dnqv


2
बस एक सिर: यह केवल तब उपयोग किया जाना चाहिए जब आप जानते हैं कि आप एक यूट्यूब यूआरएल के साथ काम कर रहे हैं। मैंने (गलत तरीके से) इसे यूआरएल के रूप में सत्यापित करने के लिए इस्तेमाल किया, जिससे झूठी सकारात्मकता पैदा हुई, जैसे यह पास: 'v / 2059-9080-5437'
फैबी

3
मैं अब एक अलग Regex का उपयोग कर रहा हूं जो एक youtube डोमेन के लिए भी जांच करता है। मुझे यकीन नहीं है कि मुझे उत्तर को अपडेट करना चाहिए क्योंकि यह एक बड़ा बदलाव है: /^.*(youtu.be\/pgyoutube(-nocookie)?.com\/(v\/pg.*u.com/\w \ / | एम्बेड \ / | *। v =)) ([\ w -] {11})। * /
मेंट

4
YouTube वीडियो आईडी के लिए 12 वर्णों पर कब स्विच करेगा?
लेनार होयट

"youtu.be" में डॉट नहीं बचना चाहिए?
एलेक्स

आप सही हैं @ शुक्रिया। हालांकि यह आमतौर पर इसे से बचने के बिना भी काम करता है।
मूली

85

इनमें से किसी ने भी रसोई के सिंक पर 1/1/2015 के रूप में काम किया, विशेष रूप से बिना प्रोटोक 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
वर्थ ध्यान में रखते हुए कि उपरोक्त समाधानों में से कई मान्य यूआरएल के इस विस्तृत बैच को कवर नहीं करते हैं, परीक्षण स्क्रिप्ट बहुत सहायक है, +1!
ब्लेंड किया

2
ध्यान दें कि यह "www.engadget.com/watch?v=dQw4w9WgXcQ" जैसी किसी चीज़ से मूर्ख बनेगा, न कि यह एक समस्या होने की संभावना है
बाइनरीफंट

यह काम करता है, लेकिन एकाधिक youtube url के See this regex101.com/r/qK5qJ5/1 के साथ पाठ को उत्पन्न करने वाली समस्या को ठीक नहीं कर सका । इसे दूसरे url को प्रतिस्थापित नहीं करना चाहिए।
आशीष

2
यदि आप नहीं चाहते हैं कि एक खाली आईडी मेल खाता है : ^.*(?:(?:youtu\.be\/|v\/|vi\/|u\/\w\/|embed\/)|(?:(?:watch)?\?v(?:i)?=|\&v(?:i)?=))([^#\&\?]+).*(यानी youtube.com/watch?v= मेल नहीं करेगा)
zurfyx

"किचन सिंक पर इनमें से कोई भी काम नहीं करता" से आपका क्या अभिप्राय है?
रुमालिक

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 + \ / | एम्बेड \ / v v =) ([^ # \ _ \ _?] *)। * देगा। * आप समूह 1 में परिणाम
मार्क

19

यह देखते हुए कि YouTube में विभिन्न प्रकार की URL शैलियाँ हैं, मुझे लगता है कि Regex एक बेहतर समाधान है। यहाँ मेरा 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
आपको वास्तव में इस एक के साथ ड्राइंग बोर्ड पर वापस जाने की आवश्यकता है। हाँ यह उपरोक्त URLs से सही रूप से मेल खाता है। लेकिन यह भी ग़लती से इस तरह के रूप में कई अन्य गैर यूट्यूब-यूआरएल तार मेल खाता है: "domain.com/embed/file.txt", "/tv/"और "Has anyone seen my watch?"। देखें: बहुत अधिक सटीक समाधान के लिए एक समान प्रश्न का मेरा उत्तर
राइडरुननर

1
मैं आपकी बात देखता हूं: "क्या यह एक YouTube URL है?" लेकिन यह मेरा लक्ष्य नहीं था। मेरे पास YouTube URL हैं - मैं केवल एक आईडी निकाल रहा हूं। हां, आपका उत्तर ठोस है (और एक उपयोग के मामले को शामिल करता है जो मेरा नहीं है)।
jeffreypriebe

आपके पास एक ही बग है जिसका मैंने ऊपर उल्लेख किया है जिसमें 'v' के साथ शुरुआत होती है
webstrap

धन्यवाद @WebDev - क्या आप जानते हैं कि यदि YouTube कभी भी आईडी में डालता है (या "v" के साथ आईडी शुरू करता है)?
jeffreypriebe

1
अभी भी आज (2013-01-25) के रूप में काम करता है। एक्शन में इसका एक उदाहरण यहां दिया गया है: jsfiddle.net/bcmoney/yBP4J
bcmoney

17

मैंने एक फ़ंक्शन बनाया है जो यूटूब, साउंडक्लाउड या वीमियो एम्बेड आईडी के लिए एक उपयोगकर्ता इनपुट का परीक्षण करता है, जो कि एम्बेडेड मीडिया के साथ एक अधिक निरंतर डिजाइन बनाने में सक्षम हो। यह फ़ंक्शन किसी ऑब्जेक्ट को withtwo गुणों का पता लगाता और लौटाता है: "टाइप" और "आईडी"। प्रकार या तो "youtube", "vimeo" या "soundcloud" हो सकता है और "id" गुण अद्वितीय मीडिया आईडी है।

साइट पर मैं एक textarea डंप का उपयोग करता हूं, जहां उपयोगकर्ता किसी भी प्रकार के लिंक या एम्बेड कोड में पेस्ट कर सकता है, जिसमें vimeo और youtube दोनों का iFrame-embedding शामिल है।

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 से दो बेहतरीन प्रतिक्रियाएँ प्राप्त की हैं। सबसे पहले, संशोधित रेगेक्स:

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

यहाँ परीक्षण कोड है (मैंने 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 को संभालने के लिए प्रायोगिक संस्करणटिप्पणियों में उल्लिखित urls :

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

यह जरूरी है parsed[2]के लिए परिवर्तित किया जा सकता parsed[3]परीक्षण में दो स्थानों पर (जो यह तो साथ गुजरता में m.youtubeपरीक्षण करने के लिए जोड़ा यूआरएल)। अगर आप समस्याओं को देखते हैं तो मुझे बताएं।


1
आपको अपने परीक्षण सूट में इसे जोड़ना चाहिए क्योंकि यह समस्याग्रस्त था और आपके regexp ने मेरे लिए इसे हल किया: youtu.be/ve4f400859I । अक्षर v को मेरे पिछले regexp में निकाल दिया गया था
मार्क ओडे जूल

1
http://youtu.be/अगर मैं /इसे जोड़ देता हूं तो मैं इसे गलत मानता हूं । इसका उपयोग करते हुए(value) => /^.*(youtu\.be\/|vi?\/|u\/\w\/|embed\/|\?vi?=|\&vi?=)([^#\&\?]*).*/.test(value)
Anima-t3d

टिप्पणियों के लिए धन्यवाद। मैंने अपना उदाहरण अभी तक अपडेट नहीं किया है (परीक्षण के लिए समय नहीं है) इसलिए मेरे कोड का उपयोग करने वाला कोई भी व्यक्ति कृपया नोट करें :-)
पॉडपर्सन

url of type = m.youtube.com के बारे में क्या है
मेहुल ठक्कर

@MehulThakkar क्या वे अन्यथा youtube.com urls के समान हैं?
पॉडपर्सन

11

tl; डॉ।

इस प्रश्न पर सभी 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];

आईडी हमेशा मैच ग्रुप 7 में होगी।

इस प्रश्न के उत्तर से पकड़े गए सभी URL के जीवंत उदाहरण: https://regexr.com/3u0d4

पूर्ण विवरण:

जितने भी उत्तर / टिप्पणियां सामने आई हैं, उनमें youtube वीडियो URL के कई प्रारूप हैं। यहां तक ​​कि कई TLD जहां वे "होस्ट" दिखाई दे सकते हैं।

आप ऊपर दिए गए regexr लिंक का अनुसरण करके मेरे द्वारा जाँच की गई विविधताओं की पूरी सूची देख सकते हैं।

RegExp को तोड़ने देता है।

^स्ट्रिंग को प्रारंभ करने के लिए स्ट्रिंग को लॉक करें। (https?:\/\/)?वैकल्पिक प्रोटोकॉल http: // या https: // ?पूर्ववर्ती आइटम को वैकल्पिक बनाता है इसलिएs और संपूर्ण समूह (कोष्ठक के सेट में संलग्न कुछ भी) वैकल्पिक हैं।

ठीक है, यह अगला भाग इसका मांस है। मूल रूप से हमारे पास दो विकल्प हैं, www.youtube.com/...idid के विभिन्न संस्करण और लिंक छोटा youtu.be/ ईद] संस्करण।

(                                                  // 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

अंत में हमारे पास वीडियो आईडी का चयन करने के लिए समूह है। कम से कम एक वर्ण जो एक संख्या, अक्षर, अंडरस्कोर या डैश है।

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

आप रेगेक्स के प्रत्येक भाग के बारे में और अधिक विस्तार से पता लगा सकते हैं कि रेगेक्स लिंक पर जाकर और यह देखें कि अभिव्यक्ति का प्रत्येक भाग यूआरएल में पाठ के साथ कैसे मेल खाता है।


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, '') .plplit (/ (vi \ / v। V =) | /v\/|youtu\.be\/|\/embed\/)/); if (b! == अनिर्धारित) {return b.split (/ [^ 0-9a-z _-] / i) [0]; } और {एक वापसी; }};
व्लादिमीर

v = nfDGK_WSFro के लिए विफल रहता है
दीन जॉन

6

चूंकि YouTube वीडियो आईडी 11 वर्णों के लिए सेट है , इसलिए substringहम url के साथ विभाजन करने के बाद बस कर सकते हैं v=। तब हम अंत में एम्परसेंड पर निर्भर नहीं होते हैं।

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

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

अच्छा और सरल :)


यह वस्तुतः स्वीकृत उत्तर का एक डुप्लिकेट है
ब्रासोफिलो

5

मैंने सभी सुझावों को संक्षेप में प्रस्तुत किया है और इस प्रश्न का सार्वभौमिक और संक्षिप्त उत्तर है:

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

5

जावा कोड: (सभी यूआरएल के लिए काम करता है:

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

    }

डेलीमोशन के लिए:

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
जावास्क्रिप्ट कोड में रेगेक्स पैटर्न के आसपास के दोहरे उद्धरणों को हटा दें और यह काम करना चाहिए।
TheDude

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

YouTube वीडियो आईडी को URL से प्राप्त करने के लिए आप निम्न कोड का उपयोग कर सकते हैं:

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 शेयर विकल्प लोगों के उपयोग पर काम करता है। एड्रेस बार से एक यूआरएल, शेयर बटन से एक यूआरएल और इनलाइन शेयर बटन से एक यूआरएल। धन्यवाद!!!
मैर्टन

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 वर्ण का होता है। मैं एक्शनस्क्रिप्ट में इसका उपयोग कर रहा हूं, यकीन नहीं तो {11,11} जावास्क्रिप्ट में समर्थित है। & V = .... के लिए भी समर्थन जोड़ा (केवल मामले में)


यह एकमात्र ऐसा था जो url के लिए काम कर रहा था, मैं उसके साथ परीक्षण कर रहा था: youtube.com/watch?feature=player_embedded&v=0zM3nApSvMg
डोमिनिक

उत्तम। धन्यवाद @ जोसा 69 लिंक संयोजन मैं परीक्षण सभी मेरे लिए काम किया है।
गोचन g

2

यह निश्चित रूप से regex की आवश्यकता है:

रूबी IRB में कॉपी करें:

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

सभी परीक्षण मामलों को देखें: https://gist.github.com/blairanderson/b264a15a8faaacicc18


2

एक और:

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

यह इस धागे में दिखाए गए किसी भी URL के साथ काम करता है।

यह तब काम नहीं करेगा जब YouTube 11 बेस 64 अक्षरों के साथ कुछ अन्य पैरामीटर को जोड़ता है। तब तक यह आसान तरीका है।


2

मैंने एक Youtube url से वीडियो आईडी निकालने के लिए एक छोटा सा फंक्शन बनाया, जिसे नीचे देखा जा सकता है।

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 में कई पैरामीटर हों।


2

यह किसी भी प्रकार के यूट्यूब लिंक से वीडियो आईडी प्राप्त कर सकता है

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 url के बाद कुछ यादृच्छिक पाठ डालते हैं, तो regexp ज़रूरत से ज़्यादा मेल खाता है। बेहतर क्रिस नोलेट जवाब:

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

ठीक है, जिस तरह से सरल पार्सिंग के साथ यह करने के लिए होगा: सब कुछ पहले के बाद शुरू कर पाने = पहले करने के लिए संकेत और संकेत।

मुझे लगता है कि उनके पास यहां एक अनुकरणीय उत्तर था:

जावास्क्रिप्ट का उपयोग कर एक Vimeo आईडी पार्स करना?


2
और क्या होगा यदि URL में शामिल नहीं है &?
एडम

तब आपको पता होना चाहिए कि समकक्ष परिसीमन क्या है। उदाहरण के लिए, पहला URL जो आपने हमें दिया था & संकेत। दूसरे URL पर, स्ट्रिंग का अंत सीमांकक है।
कार्लफिलिप

0

हम इन वर्णों को जानते हैं "? V =" कभी भी लोगों से अधिक प्रकट नहीं हो सकते हैं, लेकिन 'v' किसी भी प्रकार से ईद स्वयं का उपयोग कर सकते हैं "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 इसलिए कृपया कुशल भाग को बाहर
निकालें

0

जैसा कि एक टिप्पणी में वेबस्ट्रैप का उल्लेख किया गया है :

अगर वीडियो "v" से शुरू होता है और youtu.be से काम करता है

रेगेक्स में एक छोटा सा बग होता है \??v?=?यह सिर्फ घड़ी के हिस्से में होना चाहिए, अन्यथा 'v'यदि कोई आईडी के साथ शुरू होता है तो आप फ़िल्टर करेंगे 'v'। तो यह चाल करना चाहिए

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.