使用正则表达式从 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,但如果您可以使用引用 System.Web.dll,我建议使用 HttpUtility.ParseQueryString,而不是重新发明***【参考方案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 中提取参数值的主要内容,如果未能解决你的问题,请参考以下文章

用于从 URL 中提取值的正则表达式

使用 Java + 正则表达式从文本文档中提取 URL

js使用正则表达式从url中获取参数值

使用正则表达式从 URL 中提取***域和二级域

如何使用正则表达式从字符串中提取第 n 个 URL?

LinkExtractor 构造器各参数说明