开发者

Regex for parsing parameters from url

I'm a total noob with regexes and although I was trying hard I cannot create proper regexes to perform the following operation :

  1. take url and check if it has a '?' followed by number with varying amount of digits.
  2. if the match is correct, get the number after the '?' sign
  3. exchange this number with different one.

So let's say we have this url :

http://website.com/avatars/avatar.png?56

we take '56' and change it to '57'.

I have the following regex for searching, I'm not sure if it's proper :

开发者_开发技巧
\?[0-9]+

But I have no idea how to take ? away. Should I just throw it away from the string and forget about using regex here ? Then the replace part is the only one left.


Try this:

var url = "http://website.com/avatars/avatar.png?56"; 
var match = url.match(/\?(\d+)/); 
if(match != null) {
   url = url.replace(match[1], "new number");
} 


Your original regex will work just fine, just add back in the ? you are taking out like so:

var newnum = 57;
url = url.replace(/\?[0-9]+/, '?'+ newnum);


I'm no regex expert but I think you can use a lookaround to ignore the '?'

(?<=?)([0-9]+)

which should give you your number in the first match


VERY dummied-down approach:

$('#parse').click(function(e){
    var fromUrl = $('#from-url').val();
    var newNum = parseInt($('#new-number').val(), 10);

    var urlRE = /(?!\?)(\d+)$/;
    if (urlRE.test(fromUrl)){
        $('#result').text(fromUrl.replace(urlRE, newNum));
    }else{
        $('#result').text('Invalid URL');
    }
});

DEMO

There are not extravagant check-sums, error-checking, etc. Fromt here, use window.location or a string containing the URL if necessary.


Broken out in to a function (demo):

// Call this to replace the last digits with a new number within a url.
function replaceNumber(url, newNumber){
    // regex to find (and replace) the numbers at the end.
    var urlRE = /\?\d+$/;

    // make sure the url end in a question mark (?) and
    // any number of digits
    if (urlRE.test(url)){
        // replace the ?<number> with ?<newNumber>
        return url.replace(urlRE, '?'+newNumber);
    }

    // invalid URL (per regex) just return same result
    return url;
}

alert(replaceNumber('http://website.com/avatars/avatar.png?56', 57));


You could do this without regex.

var newNum = "57";
var url = "http://website.com/avatars/avatar.png?56";
var sUrl = url.split('?');
var rUrl = sUrl[0] + "?" + newNum;
alert(rUrl);
  1. Split the URL at the ?
  2. This returns an array.
  3. Add the first item in the array and the ? and the new number back together.

http://jsfiddle.net/jasongennaro/7dMur/

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜