微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

我正在寻找从查询字符串中删除单个参数的正则表达式,如果可能,我想在单个正则表达式中执行此操作。

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

/&?foo\=[^&]+/

只要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

编辑

正如在评论中指出的那样,有比我原来考虑的更多的边缘案例。我得到以下正则表达式来与所有这些正则表达式一起工作:

/&foo(\=[^&]*)?(?=&|$)|^foo(\=[^&]*)?(&|$)/

这是从Mark Byers’s answer修改,这就是为什么我接受那个,但罗杰·佩特的输入也很有帮助。

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

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

    
    //test cases
    var tests = [
        'foo','foo&bar=456','bar=456&foo','abc=789&foo&bar=456','foo=','foo=&bar=456','bar=456&foo=','abc=789&foo=&bar=456','foo=123','foo=123&bar=456','bar=456&foo=123','abc=789&foo=123&bar=456','xfoo','xfoo&bar=456','bar=456&xfoo','abc=789&xfoo&bar=456','xfoo=','xfoo=&bar=456','bar=456&xfoo=','abc=789&xfoo=&bar=456','xfoo=123','xfoo=123&bar=456','bar=456&xfoo=123','abc=789&xfoo=123&bar=456','foox','foox&bar=456','bar=456&foox','abc=789&foox&bar=456','foox=','foox=&bar=456','bar=456&foox=','abc=789&foox=&bar=456','foox=123','foox=123&bar=456','bar=456&foox=123','abc=789&foox=123&bar=456'
    ];
    
    //expected results
    var expected = [
        '','bar=456','abc=789&bar=456','','abc=789&foox=123&bar=456'
    ];
    
    for(var i = 0; i < tests.length; i++) {
        var output = tests[i].replace(regex,'');
        var success = (output == expected[i]);
        
        $('#output').append(
            '<tr class="' + (success ? 'passed' : 'Failed') + '">'
            + '<td>' + (success ? 'PASS' : 'FAIL') + '</td>'
            + '<td>' + escapeHtml(tests[i]) + '</td>'
            + '<td>' + escapeHtml(output) + '</td>'
            + '<td>' + escapeHtml(expected[i]) + '</td>'
            + '</tr>'
        );
    }
    
});
#output {
    border-collapse: collapse;
    
}
#output tr.passed { background-color: #af8; }
#output tr.Failed { background-color: #fc8; }
#output td,#output th {
    border: 1px solid black;
    padding: 2px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table id="output">
    <tr>
        <th>Succ?</th>
        <th>Input</th>
        <th>Output</th>
        <th>Expected</th>
    </tr>
</table>
如果你想用一个正则表达式来做到这一点,你可以这样做:
/&foo(=[^&]*)?|^foo(=[^&]*)?&?/

这是因为您需要在foo = …之前或之后匹配或并非,而不是两者兼容。

说实话,我觉得这样做更好:在一个单独的步骤中删除尾随的&符号。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


正则替换html代码中img标签的src值在开发富文本信息在移动端展示的项目中,难免会遇到后台返回的标签文本信息中img标签src属性按照相对或者绝对路径返回的形式,类似:<img src="qinhancity/v1.0.0/ima
正则表达式
AWK是一种处理文本文件的语言,是一个强大的文件分析工具。它是专门为文本处理设计的编程语言,也是行处理软件,通常用于扫描,过滤,统计汇总等工作,数据可以来自标准输入也可以是管道或文件。当读到第一行时,匹配条件,然后执行指定动作,在接着读取第二行数据处理,不会默认输出。如果没有定义匹配条件,则是默认匹配所有数据行,awk隐含循环,条件匹配多少次,动作就会执行多少次。逐行读取文本,默认以空格或tab键为分割符进行分割,将分割所得的各个字段,保存到内建变量中,并按模式或或条件执行编辑命令。与sed工作原理相比:s
正则表达式是特殊的字符序列,利用事先定义好的特定字符以及他们的组合组成了一个规则,然后检查一个字符串是否与这种规则匹配来实现对字符的过滤或匹配。我们刚才在学习正则表达式的时候,我们表示数字,字母下划线的时候是用w表示的,为什么我们在书写的时候用的是w?我们可以发现我们分割空格的话,并没有达到我们预期的效果,这里我们可以使用正则表达式的方式进行分割。我们可以发现,我们和上面得到的结果不一致,既然出错了,肯定是我们的使用方式不对。看到这里我们就能感受到正则表达式的作用了,正则表达式是字符串处理的有力工具。
Python界一名小学生,热心分享编程学习。
收集整理每周优质开发者内容,包括、、等方面。每周五定期发布,同步更新到和。欢迎大家投稿,,推荐或者自荐开源项目/资源/工具/文章~
本文涉及Shell函数,Shell中的echo、printf、test命令等。
常用正则表达,包括: 密码、 手机号、 身份证、 邮箱、 中文、 车牌号、 微信号、 日期 YYYY-MM-DD hh:mm:ss、 日期 YYY-MM-DD、 十六进制颜色、 邮政编号、 用户名、 QQ号
一、python【re】的用法1、re.match函数·单一匹配-推荐指数【★★】2、re.search函数·单一匹配-推荐指数【★★★★★】3、re.findall函数·多项匹配-推荐指数【★★★★★】4、re.finditer函数·多项匹配-推荐指数【★★★★】5、re.sub函数·替换函数-推荐指数【★★★★】二、正则表达式示例·总有一款适合你1、正则表达式匹配HTML指定id/class的标签2、正则表达式匹配HTML中所有a标签中的各类属性值3、获取标签的文本值
1.借助词法分析工具Flex或Lex完成(参考网络资源)2.输入:高级语言源代码(如helloworld.c)3.输出:以二元组表示的单词符号序列。通过设计、编制、调试一个具体的词法分析程序,加深对词法分析原理的理解,并掌握在对程序设计语言源程序进行扫描过程中将其分解为各类单词的词法分析方法。由于各种不同的高级程序语言中单词总体结构大致相同,基本上都可用一组正则表达式描述,所以构造这样的自动生成系统:只要给出某高级语言各类单词词法结构的一组正则表达式以及识别各类单词时词法分析程序应采取的语义动作,该系统