使用正则表达式从 url 中提取参数值
Posted
技术标签:
【中文标题】使用正则表达式从 url 中提取参数值【英文标题】:Extract parameter value from url using regular expressions 【发布时间】:2010-11-19 19:34:09 【问题描述】:这应该很简单(当您知道答案时)。来自this question
我想尝试发布的解决方案。我的问题是:
如何使用 javascript 正则表达式获取给定 URL 的参数值?
我有:
http://www.youtube.com/watch?v=Ahg6qcgoay4
我需要:
Ahg6qcgoay4
我试过了:
http://www.youtube.com/watch\\?v=(w11)
但是:我很烂……
【问题讨论】:
也可以查看这个问题:***.com/questions/738351/… @dfa:我将来可能需要它,谢谢你的链接。我想我应该先把这个正则表达式弄对:) '/v=[0-9A-Za-z]*/'***.com/questions/11706986/… 签出 JavaScript 模块 get-video-id,它将从任何已知的 Youtube url 格式(包括嵌入字符串)中提取 Youtube id。它不使用单一的正则表达式,而是使用一些正则表达式来查找不同的模式。 【参考方案1】:你几乎拥有它,只需要转义特殊的正则表达式字符:
regex = /http\:\/\/www\.youtube\.com\/watch\?v=([\w-]11)/;
url = 'http://www.youtube.com/watch?v=Ahg6qcgoay4';
id = url.match(regex)[1]; // id = 'Ahg6qcgoay4'
编辑:通过soupagain修复正则表达式。
【讨论】:
可能还应该对匹配是否失败进行测试,例如 var m = url.match(regex); id = (m && m.length > 1) ? m[1]:空; 不知道如何编辑答案,但上述答案不正确,因为视频 ID 包含 - 破折号字符。因此正则表达式应该是:/http\:\/\/www\.youtube\.com\/watch\?v=([\w-]11)/【参考方案2】:你为什么不把字符串拆分一下
网址上的示例
var url = "http://www.youtube.com/watch?p=DB852818BF378DAC&v=1q-k-uN73Gk"
你可以做一个拆分
var params = url.split("?")[1].split("&");
你会得到一个字符串数组,参数为名称值对,“=”为分隔符。
【讨论】:
这是一个原创想法,为此 +1,但我建议使用 HttpUtility.ParseQueryString 如果您可以使用引用 System.Web.dll,而不是重新发明***【参考方案3】:未经测试,但这应该可以工作:
/\?v=([a-z0-9\-]+)\&?/i
【讨论】:
一些 youtube 网址也有 -,例如...youtube.com/watch?v=22hUHCr-Tos @MyWhirledView 已更新连字符【参考方案4】:v 是查询参数,技术上需要考虑case ala:http://www.youtube.com/watch?p=DB852818BF378DAC&v=1q-k-uN73Gk
在 .NET 中,我建议使用 System.Web.HttpUtility.ParseQueryString
HttpUtility.ParseQueryString(url)["v"];
您甚至不需要检查密钥,因为如果密钥不在集合中,它将返回 null。
【讨论】:
严格来说应该是 var playlist = HttpUtility.ParseQueryString(new Uri(url).Query)["v"];因为 ParseQueryString 正在寻找一个查询字符串,而不是整个 URL。 还有这个:***.com/questions/20268544/… 当 OP 标记了 JS 时,为什么在 .NET 中会有这个答案?【参考方案5】:我知道这个问题很老而且已经回答了,但这也可以是一个解决方案
\b[\w-]+$
我检查了这两个网址
http://www.youtube.com/watch?v=Ahg6qcgoay4
https://www.youtube.com/watch?v=22hUHCr-Tos
DEMO
【讨论】:
【参考方案6】:我使用单独的自定义函数来获取所有 URL 参数和 URL 部分。 对于 URL 参数,(这是 URI 字符串的最后一部分,http://domain.tld/urlpart/?x=a&y=b
function getUrlVars()
var vars = ;
var parts = window.location.href.replace(/[?&]+([^=&]+)=([^&]*)/gi, function(m,key,value)
vars[key] = value;
);
return vars;
上述函数将返回一个由 url 变量组成的数组。
对于 URL 部分或函数,(即 http://domain.tld/urlpart/?x=a&y=b 我使用简单的 uri 拆分,
function getUrlParams()
var vars = ;
var parts = window.location.href.split('/' );
return parts;
您甚至可以将它们结合起来,以便在页面或 javascript 中与单个调用一起使用。
【讨论】:
以上是关于使用正则表达式从 url 中提取参数值的主要内容,如果未能解决你的问题,请参考以下文章