regex 使用正则表达式从URL中提取参数值

mqxuamgl  于 2023-11-20  发布在  其他
关注(0)|答案(7)|浏览(109)

这应该很简单(当你知道答案的时候)。
我想给给予张贴的解决方案一个尝试。我的问题是:
如何使用JavaScript正则表达式获取给定URL的参数值?
我有:

http://www.youtube.com/watch?v=Ahg6qcgoay4

字符串
我需要:

Ahg6qcgoay4


我试探着:

http://www.youtube.com/watch\\?v=(w{11})


但是:我很烂......

jutyujz0

jutyujz01#

你几乎已经做到了,只需要转义特殊的正则表达式字符:

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的正则表达式。

0wi1tuuw

0wi1tuuw2#

你为什么不把绳子拆开
URL上的示例

var url = "http://www.youtube.com/watch?p=DB852818BF378DAC&v=1q-k-uN73Gk"

字符串
你可以做一个分裂,

var params = url.split("?")[1].split("&");


你将得到一个字符串数组,参数作为名称值对,“=”作为参数。

axr492tv

axr492tv3#

没有测试,但这应该工作:

/\?v=([a-z0-9\-]+)\&?/i

字符串

fd3cxomn

fd3cxomn4#

v是一个查询参数,技术上需要考虑情况ala:http://www.youtube.com/watch?p=DB852818BF378DAC&v=1q-k-uN73Gk
在.NET中,我建议使用System.Web.HttpUtility.ParseQueryString

HttpUtility.ParseQueryString(url)["v"];

字符串
你甚至不需要检查键,因为如果键不在集合中,它将返回null。

zengzsys

zengzsys5#

我知道这个问题是老的,已经回答,但这也可以是一个解决方案

\b[\w-]+$

字符串
我查了这两个网址

http://www.youtube.com/watch?v=Ahg6qcgoay4
https://www.youtube.com/watch?v=22hUHCr-Tos


DEMO

dxxyhpgq

dxxyhpgq6#

我使用单独的自定义函数获取所有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中使用单个调用。

wd2eg0qa

wd2eg0qa7#

此RegEx支持多种YouTube URL格式。

/^(?:https?:\/\/)?(?:m\.|www\.)?(?:youtu\.be\/|youtube\.com\/(?:embed\/|v\/|watch\?v=|shorts\/|watch\?.+&v=))((\w|-){11})(?:\S+)?$/

字符串
支持的URL格式

const ytUrlFormats = {
  normal: 'https://www.youtube.com/watch?v=12345678901',
  share: 'https://youtu.be/12345678902',
  shareWithStartTime: 'https://youtu.be/12345678903?t=6',
  mobileBrowserUrl: 'https://m.youtube.com/watch?v=12345678904&list=RD12345678901&start_radio=1',
  long: 'https://www.youtube.com/watch?v=12345678905&list=RD12345678905&start_radio=1&rv=smKgVuS',
  longWithStartTime: 'https://www.youtube.com/watch?v=12345678906&list=RD12345678901&start_radio=1&rv=12345678901&t=38',
  shorts: 'https://youtube.com/shorts/12345678907',
};


您可以在TS Playground中进行检查(在控制台中运行并检查)

相关问题