更新 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);
我很难相信没有人问过这个问题,但我在任何地方都找不到任何参考资料。我需要添加一个 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);