相关疑难解决方法(0)

正则表达式从查询字符串中删除一个参数

我正在寻找一个正则表达式来从查询字符串中删除单个参数,我想在可能的情况下在单个正则表达式中执行此操作.

说我想删除foo参数.现在我用这个:

/&?foo\=[^&]+/
Run Code Online (Sandbox Code Playgroud)

只要foo不是查询字符串中的第一个参数,它就可以工作.如果是,那么我的新查询字符串以&符号开头.(例如," foo=123&bar=456"给出" "的结果&bar=456.)现在,我只是在正则表达式后检查,如果查询字符串以&符号开头,如果是,则将其砍掉.

示例边缘情况:

Input                    |  Expected Output
-------------------------+--------------------
foo=123                  |  (empty string)
foo=123&bar=456          |  bar=456
bar=456&foo=123          |  bar=456
abc=789&foo=123&bar=456  |  abc=789&bar=456
Run Code Online (Sandbox Code Playgroud)

编辑

好的,正如评论中指出的那样,有更多的边缘案例比我最初考虑的更多.我得到以下正则表达式与他们一起工作:

/&foo(\=[^&]*)?(?=&|$)|^foo(\=[^&]*)?(&|$)/
Run Code Online (Sandbox Code Playgroud)

这是从马克拜尔斯的回答中修改,这就是为什么我接受那个,但罗杰佩特的投入也帮助了很多.

以下是我正在使用的全套测试用例,以及一个测试它们的Javascript代码段:

$(function() {
    var regex = /&foo(\=[^&]*)?(?=&|$)|^foo(\=[^&]*)?(&|$)/;
    
    var escapeHtml = function (str) {
        var map = {
          '&': '&',
          '<': '&lt;',
          '>': '&gt;',
          '"': '&quot;',
          "'": '&#039;'
        };
        
        return str.replace(/[&<>"']/g, function(m) { return map[m]; });
    };

    
    //test cases
    var tests …
Run Code Online (Sandbox Code Playgroud)

regex query-string

32
推荐指数
2
解决办法
3万
查看次数

标签 统计

query-string ×1

regex ×1