OscarRyz
OscarRyz

Reputation: 199215

Extract parameter value from url using regular expressions

This should be very simple (when you know the answer). From this question

I want to give the posted solution a try. My question is:

How to get the parameter value of a given URL using JavaScript regular expressions?

I have:

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

I need:

Ahg6qcgoay4

I tried:

http://www.youtube.com/watch\\?v=(w{11})

But: I suck...

Upvotes: 53

Views: 140754

Answers (7)

Md. A. Apu
Md. A. Apu

Reputation: 1248

This RegEx supports many YouTube url formats.

/^(?:https?:\/\/)?(?:m\.|www\.)?(?:youtu\.be\/|youtube\.com\/(?:embed\/|v\/|watch\?v=|shorts\/|watch\?.+&v=))((\w|-){11})(?:\S+)?$/

Supported url formats

const ytUrlFormats = {
  normal: 'https://www.youtube.com/watch?v=12345678901',
  share: 'https://youtu.be/12345678902',
  shareWithStartTime: 'https://youtu.be/12345678903?t=6',
  mobileBrowserUrl: 'https://m.youtube.com/watch?v=12345678904&list=RD12345678901&start_radio=1',
  long: 'https://www.youtube.com/watch?v=12345678905&list=RD12345678905&start_radio=1&rv=smKgVuS',
  longWithStartTime: 'https://www.youtube.com/watch?v=12345678906&list=RD12345678901&start_radio=1&rv=12345678901&t=38',
  shorts: 'https://youtube.com/shorts/12345678907',
};

You can check this in the TS Playground (run & check in the console)

Upvotes: 0

Arun Panneerselvam
Arun Panneerselvam

Reputation: 2335

I use seperate custom functions which gets all URL Parameters and URL parts . For URL parameters, (which is the final part of an URI String, http://domain.tld/urlpart/?x=a&y=b

    function getUrlVars() {
    var vars = {};
    var parts = window.location.href.replace(/[?&]+([^=&]+)=([^&]*)/gi, function(m,key,value) {
        vars[key] = value;
    });
    return vars;
    }

The above function will return an array consisting of url variables.

For URL Parts or functions, (which is http://domain.tld/urlpart/?x=a&y=b I use a simple uri split,

function getUrlParams() { 
    var vars = {};
    var parts = window.location.href.split('/' );
    return parts;
}

You can even combine them both to be able to use with a single call in a page or in javascript.

Upvotes: 1

Taha Ishfaq Bhutta
Taha Ishfaq Bhutta

Reputation: 95

I know the question is Old and already answered but this can also be a solution

\b[\w-]+$

and I checked these two URLs

http://www.youtube.com/watch?v=Ahg6qcgoay4
https://www.youtube.com/watch?v=22hUHCr-Tos

DEMO

Upvotes: 4

Crescent Fresh
Crescent Fresh

Reputation: 116980

You almost had it, just need to escape special regex chars:

regex = /http\:\/\/www\.youtube\.com\/watch\?v=([\w-]{11})/;

url = 'http://www.youtube.com/watch?v=Ahg6qcgoay4';
id = url.match(regex)[1]; // id = 'Ahg6qcgoay4'

Edit: Fix for regex by soupagain.

Upvotes: 74

moha297
moha297

Reputation: 1912

Why dont you take the string and split it

Example on the url

var url = "http://www.youtube.com/watch?p=DB852818BF378DAC&v=1q-k-uN73Gk"

you can do a split as

var params = url.split("?")[1].split("&");

You will get array of strings with params as name value pairs with "=" as the delimiter.

Upvotes: 22

user90843
user90843

Reputation:

v is a query parameter, technically you need to consider cases ala: http://www.youtube.com/watch?p=DB852818BF378DAC&v=1q-k-uN73Gk

In .NET I would recommend to use System.Web.HttpUtility.ParseQueryString

HttpUtility.ParseQueryString(url)["v"];

And you don't even need to check the key, as it will return null if the key is not in the collection.

Upvotes: 5

Robert Swisher
Robert Swisher

Reputation: 1300

Not tested but this should work:

/\?v=([a-z0-9\-]+)\&?/i

Upvotes: 5

Related Questions