更新uri哈希javascript

Update uri hash javascript

本文关键字:javascript 哈希 uri 更新      更新时间:2023-09-26

我很难相信没有人问过这个问题,但我在任何地方都找不到参考资料。我需要添加一个URI散列片段,并更新值,如果它已经在散列中。我现在可以让它添加哈希,但我的正则表达式似乎没有捕捉到,如果它存在,所以它添加另一个而不是更新。

    setQueryString : function() {
        var value = currentPage; 
        var uri = window.location.hash;
        var key = "page";
        var re = new RegExp("([#&])" + key + "=.*#(&|$)", "i");
        var separator = uri.indexOf('#') !== -1 ? "&" : "#";
        if (uri.match(re)) {
            return uri.replace(re, '$1' + key + "=" + value + '$2');
        }
        else {
            return uri + separator + key + "=" + value;
        }
    },

如果这可以做得更干净,同时保留其他url值/哈希值,那就太好了。

请求的示例输入

起始uri值:www.example.com#page=1(或不设置#page)

然后在点击"next page"时调用setQueryString,因此值将等于:

var value = 2;
var uri = '#page1'
var key = 'page'

所以希望输出是'#page2'。

对于您的regex问题,可以使用regex /[#&]page'=('d*)/.match(regex)方法来测试模式#page=(number)&page=(number)是否存在并捕获数字。注意=需要在正则表达式中进行转义。

如果模式存在于字符串中,result将包含一个在result[1]处的整数(作为字符串)的数组。如果模式不存在,则resultnull

//match #page=(integer) or &page=(integer)
var test = "#foo=bar&page=1";
var regex = /[#&]page'=('d*)/;
var result = test.match(regex);
console.log(result);

如果您想动态地将key=设置为"page"以外的值,您可以动态地构建regex,如下所示(注意,反斜杠需要在字符串中转义,使代码更复杂):

//dynamically created regex
var test = "#foo=bar&page=1";
var key = "page"
var regex = new RegExp("[#&]" + key + "''=(''d*)");
var result = test.match(regex);
console.log(result);