`
RednaxelaFX
  • 浏览: 3038819 次
  • 性别: Icon_minigender_1
  • 来自: 海外
社区版块
存档分类
最新评论

简单替换URL中查询字符串的参数值的代码

阅读更多
刚有个需求是要把URL中query部分的一个指定参数的值替换为新的,如果该参数不存在的话就将新的键值对加到query的末尾。前提是:
1、输入的字符串可能是空的,如果不为空则保证每个参数都是key=value形式的,其中key与等号一定存在;
2、输入的key不会带有奇怪的字符……(就避开了JavaScript的正则表达式没有提供escape功能的麻烦)

想了一下觉得用正则表达式做也短不到哪里去,就先给了一个普通版本:
function setQueryParamValue(queryString, key, newValue) {
  var newParam = key + '=' + newValue;
  if (!queryString) return newParam;
  
  var replaced = false;
  var params = queryString.split('&');
  for (var i = 0; i < params.length; i++) {
    if (params[i].split('=')[0] == key) {
      params[i] = newParam;
      replaced = true;
    }
  }
  if (replaced) return params.join('&');
  return queryString + '&' + newParam;
}


然后用正则表达式加上逻辑运算表达式再实现了一遍:
function setQueryParamValue(queryString, key, newValue) {
  var replaced = false;
  var newParam = key + '=' + newValue;
  var result = queryString.replace(new RegExp('(^|&)' + key + '=(.*?)(?=$|&)', 'g'), function (s, p1, p2) {
    replaced = true;
    return p1 + newParam;
  });
  return replaced && result || queryString && (queryString + '&' + newParam) || newParam;
}

(本来要安全的话这里应该对key做一次escape,不过有前提条件保证就不管了)
从代码的字符数量来说果然没短多少……核心替换的逻辑确实是“声明式”了一些,不过不知道多少人是比较喜欢后面这种写法的呢?

在同样的前提条件下要抽取参数的值就简单多了:
function getQueryParamValue(queryString, key) {
  var result = queryString.match(new RegExp('(?:^|&)' + key + '=(.*?)(?=$|&)'));
  return result && result[1];
}

这个我就不用非正则表达式的方式去做了。

要是有更好的办法用正则表达式来实现这个功能拜托告诉我哦~~
分享到:
评论
2 楼 RednaxelaFX 2010-04-12  
lwwin 写道
有你在的单位真爽~_~

唉,继续看不懂中- -

爽毛 活没干好已经给大家带来困扰了 
我要反省……
1 楼 lwwin 2010-04-12  
有你在的单位真爽~_~

唉,继续看不懂中- -

相关推荐

    Android relaceALL替换字符串中的反斜杠

    在这段代码中,`replaceAll`函数的`regex`参数`"\\\\"`是正则表达式形式的反斜杠,因为每个反斜杠都需要转义,所以写成了两个。`replacement`参数`"/"`表示我们想要替换成的字符。 运行这段代码后,`originalString...

    将内容中的符合url格式的字符串转换为超链接(JAVA版)

    在上述代码中,我们首先编译了URL正则表达式,然后创建一个`Matcher`对象来在输入文本中查找匹配项。一旦找到匹配的URL,我们就用超链接的形式替换它,其中`&lt;a&gt;`标签用于创建超链接,`target='_blank'`属性表示链接...

    提取字符串中url域名

    `:根据编译后的正则表达式创建一个`Matcher`对象,用于与传入的URL字符串进行匹配。 - `if (matcher.find())`:如果匹配成功,则执行下一行代码。 - `return matcher.group();`:返回匹配到的第一个结果。如果...

    javascript 取Url参数和去掉字符串前后空格方法

    获取URL中的参数通常涉及到解析查询字符串(即URL中`?`后面的部分)。以下是一种常见的实现方式: ```javascript function getRequestParameter(paramName) { var url = location.href; var paramString = url....

    LoadRunner中转换字符串到URL编码

    在LoadRunner的脚本编写过程中,我们经常需要处理字符串,尤其是将普通字符串转换为URL编码格式,以确保数据正确无误地发送到服务器。本文将详细介绍如何在LoadRunner中进行URL编码,以及提供的C代码和转换工具。 ...

    js获取url参数

    - **正则表达式`reg`**:用于匹配查询字符串中特定参数的值。 - `(^|&)`: 匹配查询字符串的开头或“&”符号前的位置。 - `name`: 匹配传入的参数名。 - `=([^&]*)`: 匹配“=”号后的参数值,直到下一个“&”出现...

    JavaScript正则表达式替换字符串中图片地址(img src)的方法

    在上面的代码中,`processImageSrc()`是一个假设存在的函数,用于处理或转换捕获到的src值。`match`参数是匹配到的整个img标签,而`capture`参数是捕获组的内容,即img标签的src属性值。函数返回新的字符串,其中...

    JS正则表达式替换url参数的方法

    例如,使用正则表达式匹配URL查询字符串中的“code”参数,并提取其值。这个函数首先构建了一个正则表达式,用来匹配形如“?name=value”的查询参数。如果找到匹配,它将返回URL编码后的参数值,并将其解码。如果URL...

    Voca是一个用于操作字符串的Javascript库

    3. **查询和提取**:Voca包含查找子串、替换子串、截取字符串等方法。如`voca.startsWith()`和`voca.endsWith()`检查字符串是否以指定字符或字符串开头或结束,`voca.contains()`检查是否包含特定子串,还有`voca....

    C#优化字符串操作

    【C#优化字符串操作】 1. **Convert.ToInt32 与 Int32.Parse的比较** - `Convert.ToInt32`方法在处理无法转换...在C#开发中,理解这些字符串操作的优化技巧和不同方法的适用场景,有助于编写出更高效、更稳定的代码。

    C#字符串处理

    在Web应用中,可以通过`Request.QueryString`从URL的查询字符串中获取参数值: ```csharp string id = Request.QueryString["id"]; ``` 假设URL为`http://example.com/page.aspx?id=123`,则`id`变量的值为`123`。...

    MFC的HTTPURL的解析与替换封装类(简单版本)

    2. 解析函数:将URL字符串分解成各个组件,如`GetProtocol()`、`GetHost()`、`GetPort()`、`GetPath()`和`GetQuery()`等。 3. 替换函数:允许用户修改URL的某个特定部分,如`ReplaceProtocol()`, `ReplaceHost()`, `...

    用javascript替换URL中的参数值示例代码

    最后,重新构建URL字符串,包括协议、主机、端口、路径、查询字符串(由参数对象生成)和哈希部分。注意去除多余的`&`字符,以确保URL的正确格式。 通过这两个函数,我们可以轻松地处理URL中的参数。例如,如果你有...

    字符串.rar

    在IT领域,字符串是编程语言中的基本数据类型之一,它由一个或多个字符...无论是在简单的文本处理还是复杂的文本分析任务中,都能看到字符串的身影。了解并熟练运用字符串相关知识,能够极大地提升编程效率和代码质量。

    JDBC连接数据库字符串大全

    JDBC连接数据库字符串是连接数据库的关键部分,它包含了所有必要的信息,如驱动类、数据库URL、数据库名、主机地址、端口号以及可能的其他参数。 以下是一些主流数据库的JDBC连接字符串示例: 1. **SQL Server ...

    work2_分割字符串_字符串处理_源码.zip

    例如,Python 的 `join()` 可以将一个字符列表连接成字符串,`replace()` 用于替换字符串中的特定子串。 6. **源码分析**:压缩包内的源码可能包含各种字符串处理的示例,比如如何根据特定条件分割字符串,如何处理...

    JS网址添加参数 重复替换功能

    在前端开发过程中,经常需要对URL进行操作,比如添加或修改查询字符串参数。这段代码实现了一个简单的JavaScript函数`addpara`,用于向当前页面URL添加或替换指定参数。 #### 函数定义及参数解释 - **函数名**:`...

    获取url参数

    3. **健壮性**:代码中存在一些边界情况未被充分考虑,例如当URL中不存在指定参数时,可能会出现异常或不期望的行为。 通过上述介绍,我们可以看到这两种方法提供了灵活的方式来管理URL中的参数,但同时也需要注意...

    Slugify:一个将字符串转换为slug格式的类库

    在上述代码中,`slugify()`方法接收一个字符串作为参数,并返回对应的slug形式。注意到,中文字符会被转换成它们的拼音表示,这是为了确保在URL中可读且不包含非ASCII字符。 除了基本的转换,Slugify类库还提供了...

Global site tag (gtag.js) - Google Analytics