Extract YouTube ID with or without RegEx

后端 未结 3 1607
深忆病人
深忆病人 2021-01-13 13:32

Please let me know how to get youtube ID without going to regular expression?

Using above method following URL, didn\'t work

3条回答
  •  囚心锁ツ
    2021-01-13 14:01

    You can use following RegEx

    ^(?:(?:https?:\/\/)?(?:www\.)?)?(youtube(?:-nocookie)?\.com|youtu\.be)\/.*?(?:embed|e|v|watch\?.*?v=)?\/?([a-z0-9]+)

    RegEx Breakup:

    1. ^: Start of the line anchor
    2. (?:(?:https?:\/\/)?(?:www\.)?)?:
      • (?:https?:\/\/)?: Match http:// or https:// optionally
      • (?:www\.)?)?: Match www. zero or one time
    3. (youtube(?:-nocookie)?\.com|youtu\.be)\/: Match either
      • youtube.com or youtube-nocookie.com or youtu.be followed by /
    4. .*?: Lazy match. Match until the next pattern satisfies.
    5. (?:embed|e|v|watch\?.*?v=)?\/?:
      • (?:embed|e|v|watch\?.*?v=)?: Match embed or e or v or from watch? to v= or nothing
      • \/?: Match / zero or one time
    6. ([a-z0-9]+): Match one or more alphanumeric characters and add that in the captured group.

    Live DemoUsing JavaScript

    var regex = /^(?:(?:https?:\/\/)?(?:www\.)?)?(youtube(?:-nocookie)?\.com|youtu\.be)\/.*?(?:embed|e|v|watch\?.*?v=)?\/?([a-z0-9]+)/i;
    
    // An array of all the youtube URLs
    var youtubeLinks = [
        'http://www.youtube.com/e/dQw4w9WgXcQ',
        'http://www.youtube.com/watch?feature=player_embedded&v=dQw4w9WgXcQ',
        '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://youtu.be/dQw4w9WgXcQ',
        'http://www.youtube.com/embed/dQw4w9WgXcQ',
        'http://www.youtube.com/v/dQw4w9WgXcQ',
        'http://www.youtube.com/watch?v=dQw4w9WgXcQ',
        'http://www.youtube-nocookie.com/v/6L3ZvIMwZFM?version=3&hl=en_US&rel=0'
    ];
    
    // An object to store the results
    var youtubeIds = {};
    
    // Iterate over the youtube URLs
    youtubeLinks.forEach(function(url) {
        // Get the value of second captured group to extract youtube ID
        var id = "" + (url.match(regex) || [0, 0, 'No ID present'])[2] + "";
    
        // Add the URL and the extracted ID in the result object
        youtubeIds[url] = id;
    });
    
    // Log the object in the browser console
    console.log(youtubeIds);
    
    // To show the result on the page
    document.getElementById('output').innerHTML = JSON.stringify(youtubeIds, 0, 4);
    .youtubeId {
        color: green;
        font-weight: bold;
    }

提交回复
热议问题