在工作中需要取URL中的参数,很多,想到了写个表达式。
C#版本:
string url = "http://url/default.aspx?sname=sd&articleid=76369635-2b9c-495e-a7ec-44bbb290991f&pagenum=2&magid=156&rtype=next";
Regex urlRegex = new Regex(@"(?:^|/?|&)pagenum=([^&]*)(?:&|$)");
Match m = urlRegex.Match(url.ToLower());
string pagenum = string.Empty;
if (m.Success)
{
pagenum = m.Groups[1].Value;
}
JS版本(转):
function getUrlParam(name){
var reg = new RegExp("(^|&)"+ name +"=([^&]*)(&|$)");
var r = window.location.search.substr(1).match(reg);
if (r!=null) {
return unescape(r[2]);
}
return null;
}
alert(getUrlParam("Id"));
如当前的URL是http://localhost/test/Untitled-11.html?Id=12456,那么函数返回12456,
正则表达式"(^|&)"+ name +"=([^&]*)(&|$)"是这个函数的关键
函数的返回值r[2],代表了正则表达式中的第二个匹配 ([^&]*)。 为什么"([^&]*)"能匹配12456 呢?
根据正则表达式的语法,[^xyz] 负值字符集合。匹配未包含的任意字符。 例如, ‘[^abc]‘ 可以匹配 "plain" 中的‘p‘。 "[^&]*"就是零个或多个除"&"之外任意字符。