Search code examples
javascriptregexregex-groupregex-greedy

RegEx for matching YouTube embed ID


I'm in non-modern JavaScript and I have a string defined as follows:

"//www.youtube.com/embed/DmYK479EpQc?vq=hd720&rel=0"

I want to pull out just the DmYK479EpQc but I don't know the length. I do know that I want what is after the / and before the ?

Is there some simple lines of JavaScript that would solve this?


Solution

  • This expression might help you to do so, and it might be faster:

    (d\/)([A-z0-9]+)(\?)
    

    enter image description here

    Graph

    This graph shows how the expression would work and you can visualize other expressions in this link:

    enter image description here

    const regex = /(.*)(d\/)([A-z0-9]+)(\?)(.*)/gm;
    const str = `//www.youtube.com/embed/DmYK479EpQc?vq=hd720&rel=0`;
    const subst = `$3`;
    
    // The substituted value will be contained in the result variable
    const result = str.replace(regex, subst);
    
    console.log('Substitution result: ', result);

    Performance Test

    This JavaScript snippet shows the performance of that expression using a simple 1-million times for loop.

    const repeat = 1000000;
    const start = Date.now();
    
    for (var i = repeat; i >= 0; i--) {
    	const string = '//www.youtube.com/embed/DmYK479EpQc?vq=hd720&rel=0';
    	const regex = /(.*)(d\/)([A-z0-9]+)(\?)(.*)/gm;
    	var match = string.replace(regex, "$3");
    }
    
    const end = Date.now() - start;
    console.log("YAAAY! \"" + match + "\" is a match 💚💚💚 ");
    console.log(end / 1000 + " is the runtime of " + repeat + " times benchmark test. 😳 ");