更新 uri 哈希 javascript

Update uri hash javascript

我很难相信没有人问过这个问题,但我在任何地方都找不到任何参考资料。我需要添加一个 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, '' + key + "=" + value + '');
        }
        else {
            return uri + separator + key + "=" + value;
        }
    },

此外,如果可以在保留其他 url values/hashes 的同时使它变得更干净,那就太好了。

请求的示例输入

起始 uri 值: www.example.com#page=1(或根本没有#page)

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

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

所以希望的输出是“#page2”。

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

如果模式存在于字符串中,result 将包含一个数组,其中整数(作为字符串)位于 result[1]。如果模式不存在,result 将是 null.

//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" 以外的其他内容,您可以动态构建正则表达式,如下所示(注意反斜杠需要在字符串中转义,使代码成为有点复杂):

//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);