1

我有一个 URL,其中包含可以采用以下格式的产品 ID:

一个字母后跟任意数量的数字,然后是下划线,然后是任意数量的数字和下划线。

所以这是一个有效的产品 id:c23_02398105 和 this: c23_02398105_9238714

当然,在 URL 中,它夹在其他查询字符串项之间,所以在这个 url 中,我只想提取 id:

http://www.mydomain.com/product.php?action=edit&id=c23_02398105&side=1

我一直在尝试这样的正则表达式,但无济于事:

/&id=[a-z]_[(0-9)*]&/

提取产品ID的正确方法是什么?

4

4 回答 4

1
function qry(sr) {
  var qa = [];
  for (var prs of sr.split('&')) {
    var pra = prs.split('=');
    qa[pra[0]] = pra[1];
  }
  return qa;
}

var z = qry('http://example.com/product.php?action=edit&id=c23_02398105&side=1');
z.id; // c23_02398105

来源

于 2013-02-02T15:21:08.657 回答
1

下面为每个键返回一个值数组,因此如果您想为下面获取一个字符串,请使用一些分隔符(例如params.id.join(','))将这些值连接起来以获取以逗号分隔的 ID 字符串。

见小提琴


http://someurl.com?key=value&keynovalue&keyemptyvalue=&&keynovalue=nowhasvalue#somehash

把手:

  • 常规键/值对 ( ?param=value)
  • 没有值的键(?param:没有等号或值)
  • 带空值的键(?param=:等号,但等号右侧没有值)
  • 重复键 ( ?param=1&param=2)
  • 删除空键(?&&:没有键或值)

代码:

  • function URLParameters(_querystring){
        var queryString = _querystring || window.location.search || '';
        var keyValPairs = [];
        var params      = {};
    
        queryString = queryString.replace(/^[^?]*\?/,''); // only get search path
    
        if (queryString.length)
        {
           keyValPairs = queryString.split('&');
           for (pairNum in keyValPairs)
           {
              if (! (!isNaN(parseFloat(pairNum)) && isFinite(pairNum)) ) continue;
              var key = keyValPairs[pairNum].split('=')[0];
              if (!key.length) continue;
              if (typeof params[key] === 'undefined')
                 params[key] = [];
              params[key].push(keyValPairs[pairNum].split('=')[1]);
           }
        }
        return params;
    }
    

如何调用:

  • var params = URLParameters(<url>); // if url is left blank uses the current page URL
    params.key;                    // returns an array of values (1..n) for the key (called 'key' here)
    

使用上述 URL 的给定键 ('key','keyemptyvalue','keynovalue') 的示例输出:

  • key            ["value"]
    keyemptyvalue  [""]
    keynovalue     [undefined, "nowhasvalue"]
    
于 2013-02-02T15:25:43.157 回答
1

您可以使用 JavaScript 字符串函数代替正则表达式,如下所示:

var url = "http://www.example.com/product.php?action=edit&id=c23_02398105&side=1";
var idToEnd = url.substring(url.search("&id")+4, url.length);
var idPure = idToEnd.substring(0, idToEnd.search("&"));
alert(idPure);

输出是c23_02398105

于 2013-02-02T15:45:11.653 回答
0

以下表达式符合您的描述

/&id=([a-z]\d*_[\d_]*)/

它假设字母是小写的,并且指定格式的url中只有一个id,或者你想要的就是第一个。

var url =
   'http://www.mydomain.com/product.php?action=edit&id=c23_02398105&side=1';

var m = url.match( /&id=([a-z]\d*_[\d_]*)/ );

console.log( m && m[1] );    // 'c23_02398105'
于 2013-02-02T19:25:55.353 回答