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
155k80 gold badges312 silver badges357 bronze badges
asked Sep 2, 2011 at 13:12
-
possible duplicate of Parse query string in JavaScriptFelix Kling– Felix Kling2011年09月02日 13:15:46 +00:00Commented Sep 2, 2011 at 13:15
-
According to your example You need to parse only Query String part of URL (after question sign)?Andrew D.– Andrew D.2011年09月02日 13:17:37 +00:00Commented Sep 2, 2011 at 13:17
3 Answers 3
exec
returns a match, or null if no match found. So you need to keep exec
ing 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/
answered Sep 2, 2011 at 13:15
Sign up to request clarification or add additional context in comments.
3 Comments
pimvdb
+1
exec
will return an array or null
, so !== null
is superfluous. Also, you might want to add a semicolon on the second line.Andrew D.
this dont works for "?page=&Name=Alex" (page parameter has empty value) and, possible, if anchor id # is specified
Jamiec
@Andrew - was there a requirement for it to do so? Plus change the
*
's for +
and it'll work for blank values too.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]; }
}
}
answered Sep 2, 2011 at 13:20
Comments
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"]
// }
answered Sep 2, 2011 at 14:08
Comments
Explore related questions
See similar questions with these tags.
lang-js