【发布时间】:2016-09-06 00:58:20
【问题描述】:
我很难相信没有人问过这个问题,但我在任何地方都找不到参考资料。如果它已经在哈希中,我需要添加一个 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)
然后在单击“下一页”时调用 setQueryString,因此值将相等:
var value = 2;
var uri = '#page1'
var key = 'page'
所以有希望的输出将是“#page2”。
【问题讨论】:
-
你能举一个你正在测试的输入的例子吗
-
您似乎在这里问了几个问题,一个是关于获取正则表达式来捕获特定模式,另一个是关于读取和更新当前页面片段(哈希)值。我建议您首先隔离正则表达式问题,定义各种案例和非案例(字符串示例)来测试和read up JS 中的正则表达式。
-
@TomasLangkaas 我认为当一个(正则表达式)是另一个不工作的明确原因时,这并不是真正的多个问题。我说我已经可以更新哈希,只是如果它已经存在,正则表达式似乎没有捕获,因此允许我更新它。此处的整体哈希问题只是为了提供上下文并引出更好/替代的路线。
-
@DasBeasto,我仍然不清楚您是否需要有关如何将片段从
#page=(number)更新为#page=(number + 1)或如何捕获一些未指定的正则表达式模式的帮助(& 符号让我感到困惑),或两者(或其他)。如果你能再澄清一点,就更容易提供帮助了。 -
@TomasLangkaas 很抱歉造成混乱。我想要
#page=(number),数字是var value = currentPage(当前页面是一个int)。该值可以是任何 int,在示例中它恰好增加了 1。正则表达式用于检查 url 是否已经包含#page=1(或#foo=bar&page=1,这是 & 符号的原因),因此它更新值而不是使其成为#page=1&page=2,这是我当前的问题所在,我有它整体更新了哈希,但正则表达式没有捕捉到它,所以我得到了后者。
标签: javascript jquery uri