1

I need to parse url in JavaScript.

Here is my code:

var myRe = /\?*([^=]*)=([^&]*)/;
var myArray = myRe.exec("?page=3&Name=Alex");


for(var i=1;i<myArray.length;i++)
{
    alert(myArray[i]);   
}

Unfortunately it only works for first name=value pair.

How I can correct my code?

pimvdb
  • 141,012
  • 68
  • 291
  • 345
Neir0
  • 11,481
  • 26
  • 76
  • 136
  • possible duplicate of [Parse query string in JavaScript](http://stackoverflow.com/questions/2090551/parse-query-string-in-javascript) – Felix Kling Sep 02 '11 at 13:15
  • According to your example You need to parse only Query String part of URL (after question sign)? – Andrew D. Sep 02 '11 at 13:17

3 Answers3

4

exec returns a match, or null if no match found. So you need to keep execing until it returns null.

var myRe = /\?*([^=]*)=([^&]*)/;
var myArray;
while((myArray = myRe.exec("?page=3&Name=Alex")) !== null)
{
  for(var i=1;i<myArray.length;i++)
  {
      alert(myArray[i]);   
  }
}

Also, you're regex is wrong, it definately needs th g switch, but I got it working using this regex:

var regex = /([^=&?]+)=([^&]+)/g;

See Live example: http://jsfiddle.net/GyXHA/

Jamiec
  • 118,012
  • 12
  • 125
  • 175
  • +1 `exec` will return an array or `null`, so `!== null` is superfluous. Also, you might want to add a semicolon on the second line. – pimvdb Sep 02 '11 at 13:19
  • this dont works for _"?page=&Name=Alex"_ (page parameter has empty value) and, possible, if anchor id _#_ is specified – Andrew D. Sep 02 '11 at 14:33
  • @Andrew - was there a requirement for it to do so? Plus change the `*`'s for `+` and it'll work for blank values too. – Jamiec Sep 02 '11 at 14:35
0

If all you're trying to do is get query string name/value pairs you could do something like this:

function getQueryStringValue(varName) {
    var query = window.location.search.substring(1);
    var vars = query.split("&");

    for (var i = 0; i < vars.length; i++) {
        var pair = vars[i].split("=");
        if (pair[0] == varName) { return pair[1]; }
    }
}
Brian
  • 153
  • 1
  • 2
  • 10
0
var qs="da?page=3&page=4&Name=&xxx=43&page=&#adasdsadsa";
var params=qs.replace(/^.*\??/g,'').replace(/#.*/g,'').match(/[^&\?]+/g);
var args={};
if(params)for(var i=0;i<params.length;i++) {
  var propval=params[i].split('=');
  if(!args.hasOwnProperty(propval[0]))args[propval[0]]=[];
  args[propval[0]].push(propval[1]);
}

// result:
// args=== {
//   Name: [""],
//   page: ["3","4",""],
//   xxx: ["43"]
// }
Andrew D.
  • 7,500
  • 3
  • 19
  • 22