【问题标题】:Replace array value替换数组值
【发布时间】:2014-03-09 15:37:00
【问题描述】:

我想从 URL 查询字符串中获取数据并将其显示在 HTML 文档的正文中。我无法让脚本用空格替换 + 符号。

示例网址:www.mywebsite.com/?item=Sandwich&bread=White+Bread

在 HTML 正文中,item 的文本字段将显示“Sandwich”,但面包的文本字段将显示“White+Bread”。如何将 + 替换为空格?

这是我用来从 URL 获取值的函数

function querystring(key) {
    var re=new RegExp('(?:\\?|&)'+key+'=(.*?)(?=&|$)','gi');
    var r=[], m;
    while ((m=re.exec(document.location.search)) != null) r.push(m[1]);
    return r;
}

    $("span.item").text(querystring('item'));
    $("span.bread").text(querystring('bread'));

我尝试过使用它,但它告诉我数组没有替换功能。

.replace(/\+/g, ' ')

【问题讨论】:

  • 那是因为数组没有替换方法。您在哪里尝试使用 .replace() 电话?如果你把它放在while 循环中(比如r.push(m[1].replace(...)),它可能会起作用。另外,你为什么不使用已经执行此解析的许多用户创建的函数之一?有一些优化检索查询字符串中的键值,以及对此类内容的更好支持。例如 - stackoverflow.com/questions/901115/…(我喜欢第二个答案)
  • 也许我没有正确理解这个问题,但为什么不使用encodeURI() / decodeURI()
  • 谢谢,艾伦。我尝试搜索,但我想我没有搜索正确的标签。该解决方案效率更高,对我来说非常完美。

标签: javascript arrays url query-string


【解决方案1】:

您的函数返回一个数组,尝试通过以下方式更改它:

function querystring(key) {
    var re=new RegExp('(?:\\?|&)'+key+'=(.*?)(?=&|$)','gi');
    var r=[], m;
    while ((m=re.exec(document.location.search)) != null) r.push(m[1]);
    return r[0];
}

然后你可以使用你的替换

.replace(/\+/g, ' ')

【讨论】:

  • 这是解决我的问题的有效方法,但请参阅我的问题下的 Allan Kimmer Jensen 的评论以获得更好的解决方案。谢谢!
【解决方案2】:

我会用这样的东西替换你的函数,为了可读性而去掉正则表达式。它处理未定义的键/值,此外,您可以轻松地将其第一部分重构为 parseQueryString 函数,该函数返回当前document.location.search 的字典。

function querystring(key) {
   var hash = {};

   var pairs = document.location.search.substr(1).split('&');
   for(var i = 0; i < pairs.length; i++) {
       var tuple = pairs[i].split('=');
       hash[tuple[0]] = tuple[1];
   }

   var val = hash[key];
   return (val) ? val.replace(/\+/g, ' ') : undefined;
}

用法:

querystring('bread');
> White Bread

【讨论】:

    猜你喜欢
    • 2015-10-18
    • 2018-05-22
    • 1970-01-01
    • 1970-01-01
    • 2017-11-07
    • 2017-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多