【问题标题】:How can I match on, but exclude a regex pattern?如何匹配,但排除正则表达式模式?
【发布时间】:2011-03-01 12:08:09
【问题描述】:

我有这个网址:

http://example.com/createSend/step4_1.aspx?cID=876XYZ964D293CF&snap=true&jlkj=kjhkjh&

还有这个正则表达式模式:

cID=[^&]*

产生这个结果:

cID=87B6XYZ964D293CF

如何删除“cID=”?

谢谢

【问题讨论】:

  • 什么语言?你在工作吗?
  • 您使用的是哪个正则表达式解析器?
  • 抱歉,我应该更具体一些。我正在使用 javascript

标签: javascript regex url


【解决方案1】:

你可以使用lookbehind(不是在Javascript中):

(?<=cID=)[^&]*

或者你可以使用分组并抓住第一组:

cID=([^&]*)

【讨论】:

    【解决方案2】:

    一般来说,要完成这样的事情,您至少有 3 个选项:

    • 使用环视,因此您可以精确匹配您想要捕捉的内容
      • 遗憾的是,Javascript 中没有后视功能
    • 使用捕获组捕获特定字符串
      • 几乎普遍支持所有口味
    • 如果所有其他方法都失败了,您可以随时选择匹配的substring
      • 如果要截断的前缀/后缀的长度是已知常数,则效果很好

    参考文献


    示例

    给定这个测试字符串:

    i have 35 dogs, 16 cats and 10 elephants
    

    这些是一些正则表达式模式的匹配:

    您也可以进行多次捕获,例如:

    • (\d+) (cats|dogs) 产生 2 个匹配结果 (see on rubular.com)
      • 结果 1:35 dogs
        • 第 1 组捕获 35
        • 第 2 组捕获 dogs
      • 结果 2:16 cats
        • 第 1 组捕获 16
        • 第 2 组捕获 cats

    【讨论】:

      【解决方案3】:

      使用 JavaScript,您需要在正则表达式中使用 capture group(将要捕获的部分放入 ()

      var url = 'http://example.com/createSend/step4_1.aspx?cID=876XYZ964D293CF&snap=true&jlkj=kjhkjh&';
      
      var match = url.match(/cID=([^&]*)/);
      // ["cID=876XYZ964D293CF", "876XYZ964D293CF"]
      
      // match[0] is the whole pattern
      // match[1] is the first capture group - ([^&]*)
      // match will be 'false' if the match failed entirely
      

      【讨论】:

        【解决方案4】:

        通过使用捕获组:

        cID=([^&]*)
        

        然后得到 1 美元:

        87B6XYZ964D293CF
        

        【讨论】:

          【解决方案5】:

          这是 Javascript 代码:

           var str = "http://example.com/createSend/step4_1.aspx?cID=876XYZ964D293CF&snap=true&jlkj=kjhkjh&";
              var myReg = new RegExp("cID=([^&]*)", "i");
              var myMatch = myReg.exec(str);
              alert(myMatch[1]);
          

          【讨论】:

            【解决方案6】:

            在 javascript 中有一种特殊的语法可以让你从结果中排除不需要的匹配。语法是“?:” 在您的情况下,解决方案如下

            'http://example.com/createSend/step4_1.aspx?cID=876XYZ964D293CF&snap=true&jlkj=kjhkjh&'.match(/(?:cID=+)([^&]*)/)[1];
            

            【讨论】:

            • 这太过分了。 'http://example.com/createSend/step4_1.aspx?cID=876XYZ964D293CF&amp;snap=true&amp;jlkj=kjhkjh&amp;'.match(/cID=+([^&amp;]*)/)[1]; 更简单,因为它不需要非捕获组并返回与您的示例相同的结果。
            猜你喜欢
            • 2022-12-11
            • 1970-01-01
            • 2014-06-05
            • 1970-01-01
            • 1970-01-01
            • 2022-07-28
            • 1970-01-01
            • 2014-09-05
            相关资源
            最近更新 更多