我有一个包含产品ID的网址,该ID可以采用以下格式:
一个字母后面跟着一些数字,然后是下划线,然后是任意数量的数字和下划线。
因此,这是一个有效的产品ID:c23_02398105
,因此: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的正确方法是什么?
答案 0 :(得分: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
答案 1 :(得分:1)
下面返回每个键的值数组,因此如果您想获取下面的字符串,请使用某个分隔符(例如params.id.join(',')
)连接值以获取逗号分隔的ID字符串。
http://someurl.com?key=value&keynovalue&keyemptyvalue=&&keynovalue=nowhasvalue#somehash
?param=value
)?param
:没有等号或值)?param=
:等号,但等号右边没有值)?param=1¶m=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)
key ["value"]
keyemptyvalue [""]
keynovalue [undefined, "nowhasvalue"]
答案 2 :(得分:1)
您可以使用JavaScript字符串函数代替regexp,如下所示:
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
答案 3 :(得分: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'