Javascript获取url参数的整数值以在函数中替换它

时间:2014-08-26 13:43:44

标签: javascript regex

我在javascript方面遇到了一些困难。我目前正在制作一个分页队长。

    function skip(s)
    {
    var url = window.location.toString();
    if(location.href.match(/(\?|&)currentpage=x($|&|=)/))
    {
        url=url.replace('currentpage=x','currentpage='+s);
        window.location=url;    
    }
    else
    {
        var newUrl = url+"&currentpage="+s;
        window.location=newUrl;
    }
}

我希望x匹配任何整数,因此整个字符串将被替换。

谢谢!

2 个答案:

答案 0 :(得分:0)

您可以使用以下代码

function addParameter(url, param, value) {
    // Using a positive lookahead (?=\=) to find the
    // given parameter, preceded by a ? or &, and followed
    // by a = with a value after than (using a non-greedy selector)
    // and then followed by a & or the end of the string
    var val = new RegExp('(\\?|\\&)' + param + '=.*?(?=(&|$))', 'i'),
        qstring = /\?.+$/;

    // Check if the parameter exists
    if (val.test(url)) {
        // if it does, replace it, using the captured group
        // to determine & or ? at the beginning
        return url.replace(val, '$1' + param + '=' + value);
    }
    else if (qstring.test(url)) {
        // otherwise, if there is a query string at all
        // add the param to the end of it
        return url + '&' + param + '=' + value;
    }
    else {
        // if there's no query string, add one
        return url + '?' + param + '=' + value;
    }
}

用法,

function skip(s) {
    window.location = addParameter(location.href, "currentpage", s);
}

Demo

答案 1 :(得分:0)

你正在寻找的正则表达式是这样的:

/((\?|&)currentpage=)\d+/

匹配并捕获 ?|&currentpage=,并匹配后面的数字,但不捕获它们。然后,您可以使用您选择的字符串替换整个匹配项:

var newUrl = location.href.replace(/([?&]currentpage=)\d+/, '$1'+s);

假设s这里是currentpage的值,您想要替换示例中的 x 。我已将(\?|&)替换为字符类:[?&]。它只是匹配一个单个字符?或者&amp ;.在替换字符串中,我使用$1反向引用匹配的组([?&] currentpage =),并将s连接到它。就这么简单。重定向:

location.href = location.href.replace(
    /([?&]currentpage=)\d+/,
   '$1' + s
);

你有家的自由。在你的控制台中尝试一下,如下:

'http://www.example.com/page?param1=value1&currentpage=123&param2=foobar'.replace(
    /([?&]currentpage=)\d+/,
   '$1124'//replaced + s with 124
);
//output:
//"http://www.example.com/page?param1=value1&currentpage=124&param2=foobar"