Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript正则表达式解析复杂url字符串_Javascript_Regex_Url_String Parsing_Query Parameters - Fatal编程技术网

Javascript正则表达式解析复杂url字符串

Javascript正则表达式解析复杂url字符串,javascript,regex,url,string-parsing,query-parameters,Javascript,Regex,Url,String Parsing,Query Parameters,我需要解析一个复杂的URL字符串来获取特定的值 从以下URL字符串: /api/rss/feeds?url=http://any-feed-url-a.com?filter=hot&format=rss&url=http://any-feed-url-b.com?filter=rising&format=rss 我需要以数组格式提取此结果: ['http://any-feed-url-a.com?filter=hot&format=rss', 'http://any-feed-url-b

我需要解析一个复杂的URL字符串来获取特定的值

从以下URL字符串:

/api/rss/feeds?url=http://any-feed-url-a.com?filter=hot&format=rss&url=http://any-feed-url-b.com?filter=rising&format=rss

我需要以数组格式提取此结果:

['http://any-feed-url-a.com?filter=hot&format=rss', 'http://any-feed-url-b.com?filter=rising&format=rss']
我已经尝试过使用这个
/url=([^&]+)/
,但我无法正确捕获所有查询参数。我想省略
url=


提前感谢。

如果您的输入在现实中的格式比问题中显示的更好,并且您的目标是现代JavaScript环境,则有
URL
/
URLSearchParams

const input='/api/rss/feeds?url=http://any-feed-url-a.com?filter=hot%26format=rss&url=http://any-feed-url-b.com?过滤器=上升%26格式=rss';
常量url=新url(输入,'http://example.com/');

log(url.searchParams.getAll('url')您是否尝试过使用
split
方法?而不是使用正则表达式

const urlsArr = "/api/rss/feeds?url=http://any-feed-url-a.com?filter=hot&format=rss&url=http://any-feed-url-b.com?filter=rising&format=rss".split("url=");
    urlsArr.shift(); // removing first item from array -> "/api/rss/feeds?"
console.log(urlsArr)
)

哪个将返回
[“/api/rss/feeds?”http://any-feed-url-a.com?filter=hot&format=rss&", "http://any-feed-url-b.com?filter=rising&format=rss“]
然后我将删除数组中的第一项


如果可能的话,最好使用其他的正则表达式,这个正则表达式适合我:
url=([a-z:/。?=-]+&[a-z=]+)

此外,您还可以测试它:
/http(s)?:/([a-z-.?=&])+&/g

const string='/api/rss/feeds?url=http://any-feed-url.com?filter=hot&format=rss&url=http://any-feed url.com?filter=latest&format=rss'
常量string2='/api/rss/feeds?url=http://any-feed-url.com?filter=hot&format=rss&next=parm&url=http://any-feed url.com?filter=latest&format=rss'
const regex=/url=([a-z:/.?=-]+&[a-z=]+)/g;
常量regex2=/http(s):\/\/([a-z-.?=&])+&/g;
console.log(string.match(regex))

console.log(string2.match(regex2))
您可以匹配所有url,然后将捕获组1映射到一个数组

str='/api/rss/feeds?url=http://any-feed-url-a.com?filter=hot&format=rss&url=http://any-feed-url-b.com?filter=rising&format=rss'
arr=[…str.matchAll(/url=(.*?(=&url=|$)/g)].map(x=>x[1])

console.log(arr)
我想省略
url=
——您已经省略了它,因为它不是捕获组的一部分。您的数据在第1组中。我认为您需要
var regex=/url=(.+?)(?=&url=|$)/g
,运行
regex.exec(str)
并获取组1。您正在使用一个捕获组,这就是值所在的位置。尝试<代码> URL =(.*?)(?= URL=$$)< /C> >您是否考虑使用查询字符串解析LIB而不是使用ReGEXP来执行此操作?您不使用所讨论的字符串,即“代码> /API/RSS/FEDDS?URL = URL =http://any-feed-url-a.com?filter=hot&format=rss&url=http://any-feed-url-b.com?filter=rising&format=rss
,所以这个答案对OP没有帮助。@WiktorStribiżew:你不知道它对OP没有帮助。因为你没有回答当前的问题,所以它不能。@WiktorStribiżew:不正确,抱歉。如果这有帮助,就不需要复制现有的解决方案。这个问题将是Hi Kordrad的副本,谢谢。它可以工作,但是您知道如何在结果中省略
url=
?当然,我可以做一个字符串替换。但是,如果使用类似的正则表达式来忽略它,那么?
[^url]+
可能不会达到您的目的
((?!url=)+
,也许吧?试试这个:
/http(s)?:/([a-z-。?=&])+&/g
,只需从
http
文本开始搜索您的值