用于从url解析参数的正则表达式

时间:2011-07-08 14:47:12

标签: javascript jquery regex parsing url

我是一个有正则表达式的总菜鸟,虽然我努力工作但我无法创建正确的正则表达式来执行以下操作:

  1. 获取网址并检查其是否有“?”后跟数字位数不同的数字。
  2. 如果匹配正确,请在“?”符号后面输入数字
  3. 用不同的号码兑换这个号码。
  4. 所以我们假设我们有这个网址:

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

    我们选择“56”并将其更改为“57”。

    我有以下正则表达式搜索,我不确定它是否合适:

    \?[0-9]+
    

    但我不知道如何将?带走。我应该把它从字符串中扔掉而忘记在这里使用正则表达式吗?然后替换零件是唯一剩下的零件。

5 个答案:

答案 0 :(得分:3)

试试这个:

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

答案 1 :(得分:1)

你的原始正则表达式会正常工作,只需添加回?就可以了:

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

答案 2 :(得分:0)

非常 dummied-down方法:

$('#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

没有奢侈的校验和,错误检查等。如果需要,请使用window.location或包含URL的字符串。


进入函数(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));

答案 3 :(得分:0)

我不是正则表达式专家,但我认为您可以使用lookaround来忽略'?'

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

应该在第一场比赛中给你你的号码

答案 4 :(得分:0)

你可以在没有正则表达式的情况下做到这一点。

var newNum = "57";
var url = "http://website.com/avatars/avatar.png?56";
var sUrl = url.split('?');
var rUrl = sUrl[0] + "?" + newNum;
alert(rUrl);
  1. ?
  2. 处拆分网址
  3. 返回一个数组。
  4. 添加数组中的第一项,并将?和新号码重新组合在一起。
  5. http://jsfiddle.net/jasongennaro/7dMur/