2011-08-01 31 views
16

के लिए रेगेक्स मैंने पूरी तरह से देखा है और मैंने यूट्यूब के लिए यूआरएल से वीडियो आईडी को पार्स करने के कई तरीके देखे हैं, हालांकि, उनमें से कोई भी यूट्यूब यूआरएल के सभी विभिन्न प्रारूपों से मेल नहीं खाता है। पिछली पोस्ट में प्रस्तुत रेगेक्स के साथ गड़बड़ करने की कोशिश की है, लेकिन कुछ भी काम नहीं कर रहा था।यूट्यूब आईडी

निकटतम पोस्ट मैंने पाया कि सभी विभिन्न URL स्वरूपों कवर यह एक था: http://www.youtube.com/sandalsResorts#p/c/54B8C800269D7C1B/0/FJUvudQsKCM

मैं जावास्क्रिप्ट में यह कर रहा हूँ: How do I find all YouTube video ids in a string using a regex?

हालांकि, इस के लिए काम नहीं करता। क्या कोई मदद कर सकता है ?!

अग्रिम में Thanx।

वर्तमान URL स्वरूपों और स्क्रिप्ट मैं उपयोग कर रहा हूँ:

var url = "http://www.youtube.com/sandalsResorts#p/c/54B8C800269D7C1B/0/FJUvudQsKCM"; 
//var url = "http://www.youtube.com/user/Scobleizer#p/u/1/1p3vcRhsYGo"; 
//var url = "http://youtu.be/NLqAF9hrVbY"; 
//var url = "http://www.youtube.com/embed/NLqAF9hrVbY"; 
//var url = "https://www.youtube.com/embed/NLqAF9hrVbY"; 
//var url = "http://www.youtube.com/v/NLqAF9hrVbY?fs=1&hl=en_US"; 
//var url = "http://www.youtube.com/watch?v=NLqAF9hrVbY"; 
//var url = "http://www.youtube.com/user/Scobleizer#p/u/1/1p3vcRhsYGo"; 
//var url = "http://www.youtube.com/ytscreeningroom?v=NRHVzbJVx8I"; 
//var url = "http://www.youtube.com/user/Scobleizer#p/u/1/1p3vcRhsYGo"; 
//var url = "http://www.youtube.com/watch?v=JYArUl0TzhA&feature=featured"; 

var videoID = url.match(/(?:youtu\.be\/|youtube\.com(?:\/embed\/|\/v\/|\/watch\?v=|\/user\/\S+|\/ytscreeningroom\?v=))([\w\-]{10,12})\b/)[1]; 
alert(videoID); 
+0

के संभावित डुप्लिकेट [जावास्क्रिप्ट रेगेक्स: यूआरएल से यूट्यूब वीडियो आईडी कैसे प्राप्त करें?] (Http://stackoverflow.com/questions/3452546/javascript-regex-how-to-get-youtube-video-id-from-url) –

+0

आप कोशिश कर सकते हैं [ मिल-वीडियो-id] (https://github.com/radiovisual/get-video-id)। यह किसी ज्ञात यूट्यूब यूआरएल स्ट्रिंग (या एम्बेड स्ट्रिंग) से आईडी को पकड़ लेगा। – radiovisual

उत्तर

43

यह एक डुप्लिकेट प्रश्न है, और इसका उत्तर दिया गया है।

मुझे लगता है कि आपको रेगेक्स मिलेगा यहां पर काम भी करेगा।

parse youtube video id using preg_match

संपादित: मैंने देखा है कि यह sandalsResort यूआरएल आप अपनी सूची के शीर्ष पर है के लिए काम नहीं करता है, तो आप करने के लिए regex संशोधित कर सकते हैं निम्नलिखित (जे एस में उपयोग के लिए परिवर्तित)

var myregexp = /(?:youtube\.com\/(?:[^\/]+\/.+\/|(?:v|e(?:mbed)?)\/|.*[?&]v=)|youtu\.be\/)([^"&?\/ ]{11})/i; 

सभी मैंने किया [^/]+

आईडी के साथ user को बदलने के लिए था अभी भी वापस-r में कब्जा कर लिया है eference 1.

+1

धन्यवाद .... हाँ जैसा कि बताया गया है, मुझे बहुत सारे रेगेक्स मिले हैं, लेकिन उनमें से कोई भी सभी यूआरएल संभावनाओं को कवर नहीं करता है। यह बहुत अच्छा काम करता है! – Stanley

4

यह बहुत एक भी नियमित अभिव्यक्ति है जो इन संभव URL में सभी संभालती लिखने के लिए गंदा होगा।

मैं शायद एक if ... का उपयोग कर सकता हूं अगर अन्यथा यह निर्धारित करने के लिए संरचना कि यूआरएल किस रूप में है और फिर प्रत्येक वीडियो आईडी को खींचने के लिए एक छोटी और विशिष्ट नियमित अभिव्यक्ति का उपयोग करें।

+0

यह वही है जो [get-video-id] (https://github.com/radiovisual/get-video-id) में हो रहा है। – radiovisual

1

आपको शायद इसके लिए रेगेक्स की आवश्यकता नहीं है। पैटर्न में बहुत कम भिन्नता है, और खुद को delimiters (/, और कभी-कभी ?, =, या #) अपरिवर्तनीय हैं। मैं सुझाव है कि आप चरणों में इस ले, सादे पुराने स्ट्रिंग परिवर्तन का उपयोग कर अपनी अगली चाल तय करने के लिए:

  1. स्प्लिट / पर यूआरएल।
  2. वर्तमान में http:// और www. अनदेखा करें।
  3. जांचें कि डोमेन नाम youtube.com या youtu.be है।
  4. यदि डीएन youtu.be है, तो आईडी अगला खंड है। इसे वापस करें और रोकें।
  5. पार्सिंग पैरामीटर प्रारंभ करें। अगला सेगमेंट देखें:
    • यदि यह embed है, तो निम्न सेगमेंट को पूर्ण रूप से वापस करें।
    • यदि यह v है, ? पर विभाजित करें और पहले भाग को वापस करें।
    • यदि यह user है, तो आगे चार सेगमेंट गिनें और आपके पास आईडी होगी।
    • यदि यह watch है, तो ? पर विभाजित करें और फिर = पर विभाजित करें।

... आदि।

मुझे नहीं पता कि YouTube यूआरएल के लिए कितने संभावित पैटर्न हैं, लेकिन यदि आपके पास प्रारूपों की पूरी सूची है, तो आप बस उनके चारों ओर एक if/else पेड़ बना सकते हैं। मेरी मुख्य सलाह सिर्फ / पर विभाजित है और यूआरएल में प्रासंगिक संकेतों का उपयोग करके, बाकी के विश्लेषण को निर्धारित करने के लिए वहां से जाएं।

+0

यह अनिवार्य रूप से [get-video-id] में हो रहा है (https://github.com/radiovisual/get-video-id)। यह सब कुछ के लिए एक एकल RegExp को बनाए रखने की कोशिश नहीं करता है, इसके बजाय यह यूआरएल पैटर्न को समूहों में विभाजित करता है, जिससे चीजों को कारण बनाना बहुत आसान हो जाता है। – radiovisual

0

इस प्रयास करें:

var urls = 
["http://www.youtube.com/sandalsResorts#p/c/54B8C800269D7C1B/0/FJUvudQsKCM", 
"http://www.youtube.com/user/Scobleizer#p/u/1/1p3vcRhsYGo", 
"http://youtu.be/NLqAF9hrVbY", 
"http://www.youtube.com/embed/NLqAF9hrVbY", 
"https://www.youtube.com/embed/NLqAF9hrVbY", 
"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", 
"http://www.youtube.com/ytscreeningroom?v=NRHVzbJVx8I", 
"http://www.youtube.com/user/Scobleizer#p/u/1/1p3vcRhsYGo", 
"http://www.youtube.com/watch?v=JYArUl0TzhA&feature=featured"]; 

var ids = []; 

for(var i in urls) { 
    tmp = urls [ i ]; 
    tmp2 = get_video_id(tmp); 
    if(tmp2 != null) 
    { 
     ids.push("url:" + tmp + " ID:" + tmp2); 
    } 
} 

alert(ids.join("\n")); 



function get_video_id(input) { 
return input.match(/(?:youtu\.be\/|youtube\.com(?:\/embed\/|\/v\/|\/watch\?v=|\/user\/\S+|\/ytscreeningroom\?v=|\/sandalsResorts#\w\/\w\/.*\/))([^\/&]{10,12})/)[1]; 
} 

आउटपुट:

url:http://www.youtube.com/sandalsResorts#p/c/54B8C800269D7C1B/0/FJUvudQsKCM ID:FJUvudQsKCM 
url:http://www.youtube.com/user/Scobleizer#p/u/1/1p3vcRhsYGo ID:p3vcRhsYGo 
url:http://youtu.be/NLqAF9hrVbY ID:NLqAF9hrVbY 
url:http://www.youtube.com/embed/NLqAF9hrVbY ID:NLqAF9hrVbY 
url:https://www.youtube.com/embed/NLqAF9hrVbY ID:NLqAF9hrVbY 
url:http://www.youtube.com/v/NLqAF9hrVbY?fs=1&hl=en_US ID:NLqAF9hrVbY? 
url:http://www.youtube.com/watch?v=NLqAF9hrVbY ID:NLqAF9hrVbY 
url:http://www.youtube.com/user/Scobleizer#p/u/1/1p3vcRhsYGo ID:p3vcRhsYGo 
url:http://www.youtube.com/ytscreeningroom?v=NRHVzbJVx8I ID:NRHVzbJVx8I 
url:http://www.youtube.com/user/Scobleizer#p/u/1/1p3vcRhsYGo ID:p3vcRhsYGo 
url:http://www.youtube.com/watch?v=JYArUl0TzhA&feature=featured ID:JYArUl0TzhA 
+1

मुझे लगता है कि इसके साथ समस्या यह है कि "सैंडल रीसेट" भाग संभवतः स्थिर नहीं है और उसी प्रारूप के साथ विभिन्न यूआरएल के लिए बदल जाएगा। – Benjam

+1

स्कॉबलाइज़र यूआरएल के लिए आईडी में एक चरित्र गुम है। –

0
var get_id = function(url){ 
    var code = url.match(/v=([^&#]{5,})/) 
    return (typeof code[1] == 'string') ? code[1] : false; 
} 
3

मैं इस regexp का उपयोग करें: /youtu(?:.*\/v\/|.*v\=|\.be\/)([A-Za-z0-9_\-]{11})/ और यह मेरे लिए ठीक काम करता है। ?

-1

इस उदाहरण में अपने regexes incorperated:

(वहाँ वास्तव में (कई यूट्यूब वीडियो के साथ एक पाठ से बाहर एक सरणी हो रही का एक तरीका है)

कॉपी और यह फ़ाइल नाम के साथ एक फ़ाइल पेस्ट: detectYoutubeLinksAsYouType .html

पुनश्च: यह केवल मुझे है ... या stackoverflow.com पूरा bullsh के लॉगिन कार्यक्षमता है ...

<!DOCTYPE HTML> 
<html> 
    <head> 
     <title></title> 

     <!-- scripts --> 
     <!-- last jquery version that supports ie8/9 --> 
     <script type="text/javascript" src="../js/jquery-1.10.2.js"></script> 
     <script type="text/javascript"> 
      /* search for youtube-video-id inside a given text/url */ 
      function findYoutubeVideoID(url) { 

       // thanks for the regexes guys! 
       var YoutubeRegexObject_v1 = /(?:youtube\.com\/(?:[^\/]+\/.+\/|(?:v|e(?:mbed)?)\/|.*[?&]v=)|youtu\.be\/)([^"&?\/ ]{11})/i; // only gets the first VideoURL 
       var YoutubeRegexObject_v2 = /(?:youtu\.be\/|youtube\.com(?:\/embed\/|\/v\/|\/watch\?v=|\/user\/\S+|\/ytscreeningroom\?v=|\/sandalsResorts#\w\/\w\/.*\/))([^\/&]{10,12})/; 

       var YoutubeVideoID = url.match(YoutubeRegexObject_v1); 

       return YoutubeVideoID[1]; 
      } 

      /* generate youtube embed code */ 
      function generateYoutubeEmbedCode(YoutubeVideoID,width,height) 
      { 
       if(!width) 
       { 
        width = "854"; 
       } 
       if(!height) 
       { 
        height = "510"; 
       } 
       return '<iframe width="'+width+'" height="'+height+'" src="//www.youtube.com/embed/'+YoutubeVideoID+'" frameborder="0" allowfullscreen></iframe>'; 
      } 

      $(document).ready(function() { 
       $("#text").on('change keyup paste', function() { 
        var text = $(this).html(); 
        var YoutubeVideoID = findYoutubeVideoID(text); 
        var YoutubeVideoEmbedCode = generateYoutubeEmbedCode(YoutubeVideoID); 
        $("#findYoutubeVideoID").html(YoutubeVideoID); 
        $("#DisplayVideo").html(YoutubeVideoEmbedCode); 
       }); 

       $("#search").on('click', function() { 
        var text = $("#text").html(); 
        var YoutubeVideoID = findYoutubeVideoID(text); 
        var YoutubeVideoEmbedCode = generateYoutubeEmbedCode(YoutubeVideoID); 
        $("#findYoutubeVideoID").html(YoutubeVideoID); 
        $("#DisplayVideo").html(YoutubeVideoEmbedCode); 
       }); 
      }); 
     </script> 
    </head> 
    <body> 
     <style> 
      .parent { 
       margin: 0 auto; 
       position: relative; 
       border: 1px solid red; 
       width: 500px; 
      } 
      .element { 
       border: 1px solid red; 
       position: relative; 
       float: left; 
       min-height: 20px; 
       margin: 10px; 
       min-width: 45%; 
      } 
     </style> 
     <div class="parent"> 
      <div class="element">Detect youtube links as you type!</div> 
      <div class="element" id="text" contenteditable="true"> 
       Copy paste Youtube-Video-Url here! e.g. this one: https://www.youtube.com/watch?v=QOJ1nYPBonQ 
      </div> 
      <div class="element" >The VideoID is:</div> 
      <div class="element" id="findYoutubeVideoID"></div> 
      <div class="element" id="DisplayVideo"></div> 
      <div class="element"> <button id="search">Search for YoutubeID</button></div> 
     </div> 
    </body> 
</html> 
+0

मुझे कैप्चा दर्ज करने की आवश्यकता क्यों है जब मुझे लॉग इन किया जा रहा है? – canoodle

संबंधित मुद्दे