【问题标题】:I need to match a certain part of url path using Regex and Javascript我需要使用 Regex 和 Javascript 匹配 url 路径的某个部分
【发布时间】:2012-11-12 02:36:28
【问题描述】:

我有以下链接:

sitename.com/Default.aspx?PageID=13078494

我想获取以下内容:“PageID=13078494”。这是我目前所拥有的:

var url = "sitename.com/Default.aspx?PageID=13078494";    
urlmatch = url.match([PageID=13078494]);
urlmatch[0];

这是我想要做的正确表达吗?

【问题讨论】:

  • 只是为了检查一下,您是否尝试匹配任何页面 ID,或者特别是页面 ID 13078494?从你的例子很难说。我们都假设(包括我自己)您的意思是要匹配任何页面 ID。

标签: javascript regex expression


【解决方案1】:

您的正则表达式及其语法错误。

更好的方法是根本不使用正则表达式。请改用.split()

var urlmatch = url.split('?')[1];

这是小提琴:http://jsfiddle.net/qpXNU/

【讨论】:

    【解决方案2】:
    var myregexp = /[?&]PageID=(\d+)/i;
    var match = myregexp.exec(url);
    if (match != null) {
        //This is if your match it successful
        result = match[1];
    } else {
        //This is if url doesn't match
        result = "";
    }
    

    无论 PageID 在哪里,这个都可以工作。它会匹配

    • sitename.com/Default.aspx?PageID=13078494
    • anything.org/Default.aspx?PageID=13078494
    • sitename.com/Default.aspx?foo=bar&PageID=13078494
    • sitename.com/Default.html?foo=bar&PageID=13078494&bar=foo
    • Default.html?foo=bar&PageID=13078494&bar=foo

    重要的是,它不会匹配

    • sitename.com/Default.aspx?NotThePageID=13078494

    或者没有检查,简单地 url.match(/[?&]PageID=(\d+)/i)[1],但我建议不要这样做,除非您确定它会始终匹配。

    【讨论】:

    • +1 ?$ 的好消息 - 不知道我抽什么烟错过了。一个小问题:[?|&] 也匹配 |,因为 [] 表示要匹配的字符列表,与 () 不同,管道充当 or 分隔符。
    • 糟糕,感谢您的关注。最初这些是圆括号,我把它们做成了方括号,忘记删除 OR 运算符。 ;)
    • 很容易 - 不要忘记在你的第二个例子中也改变它!还刚刚注意到您正在抓取 match[0],它将包含完整匹配的文本 (PageID=13078494) - 第一个捕获组以 match[1] 结束 :)
    【解决方案3】:

    尝试以下正则表达式,它将提取 PageID 并将其放在第一个匹配组中:

    var url = "sitename.com/Default.aspx?PageID=13078494";
    urlmatch = url.match(/PageID=(\d+)/);
    alert(urlmatch[1]);​ // 13078494
    

    【讨论】:

      【解决方案4】:

      如果你匹配特定的值,那就没问题,否则使用下面来匹配pageID中的任意位数:

            /PageID=\d+/
      

      作为:

          var url = "sitename.com/Default.aspx?PageID=13078494";
          var urlmatch = url.match(/PageID=\d+/);
          alert(urlmatch[0]);
      

      或者要匹配 pageID 中的 8 个精确数字,请使用:

            /PageID=\d{8}/ 
      

      作为:

          var url = "sitename.com/Default.aspx?PageID=13078494";
          var urlmatch = url.match(/PageID=\d{8}/);
          alert(urlmatch[0]);
      

      【讨论】:

      • @user1119742:感谢您的反馈。
      【解决方案5】:

      在处理 URL 方面,浏览器非常好。

      您应该像这样将您的字符串转换为实际的 URL:

      var toURL = function (href) {
          var a = document.createElement('a');
          a.href = href;
          return a;
      };
      

      现在使用浏览器的built-in parsing capabilities:

      var url = toURL('sitename.com/Default.aspx?PageID=13078494');
      alert(url.search);
      

      【讨论】:

        猜你喜欢
        • 2012-02-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-02-21
        • 2014-07-17
        • 1970-01-01
        相关资源
        最近更新 更多