【问题标题】:Update uri hash javascript更新 uri 哈希 javascript
【发布时间】: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


【解决方案1】:

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

如果该模式存在于字符串中,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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-26
    • 2019-05-19
    • 1970-01-01
    • 2014-03-03
    • 2021-08-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多