使用正则表达式解析URL查询参数
Parsing URL Query Parameters using regex
我想使用regex智能地解析url查询参数。
我必须考虑的事情:1)参数可能是无序的2)只有特定的参数必须匹配给定一个查询字符串:"?param1=test1¶m2=test2&parm3=test3"我想运行javascript regex解析param1的值和param3的值。
到目前为止我想到的正则表达式是:
/(?:[?&](?:param1=([^&]*)|param3=([^&]*)|[^&]*))+$/g
这个正则表达式似乎对我来说在https://regex101.com/等网站工作得很好。
然而,当我运行下面的JS方法时,我总是得到$2的未定义,这是param1的值应该解析到的。有什么帮助或建议吗?
"?param1=test1¶m2=test2¶m3=test3".replace(
/(?:[?&](?:param1=([^&]*)|param3=([^&]*)|[^&]*))+$/g,
function ($0, $1, $2, $3) { return $0 + ' ' + $1 + ' ' + $2 + ' ' + $3; });
返回$2为未定义,$3为test3。但是,如果从url查询字符串中排除param2和param3,则可以成功地将param1解析为$2。我有点困惑。
谢谢!
.*parameterName=([^&|'n|'t's]+)
使用此模式将为您在组中提供参数值。例如这个URL:https://www.youtube.com/watch?v=aiYpDDHKy18&列表= RDaiYpDDHKy18& start_radio = 1
.*list=([^&|'n|'t's]+)
将得到你:列表id: "RDaiYpDDHKy18"
.*start_radio=([^&|'n|'t's]+)
会给你1号。
如果它们的顺序是任意的,您可以使用查找来查找它们并捕获参数值。您想要的模式(用于测试字符串)是这样的:
^(?=.*param1=([^&]+)|)(?=.*param2=([^&]+)|)(?=.*param3=([^&]+)|).+$
Regex101的演示
它还将接受缺少参数的查询字符串,因为每个forward在参数/值对或空字符串上交替,在末尾使用|
。
您需要对希望获取的每个参数进行额外的提前查看,这是没有办法的。因为每个正则表达式都是底层的状态机,所以使用原始模式时唯一需要坚持的是给定捕获组的最新匹配。
相关文章:
- 如何有效地将游戏数据存储在URL查询字符串中
- Javascript/jQuery URL查询参数解析
- Express编辑URL查询为“”;favicon.ico”;
- 将 URL 查询字符串传递给 Javascript 函数
- 删除在单击其他选项卡时生成的url查询元素的一部分
- 将URL查询字符串值从JavaScript编码为ASP.NET MVC
- 如何基于下拉选择构建 URL 查询字符串
- 使用 URL 查询字符串动态显示 Facebook Open Graph
- 有没有办法确定角度.js是否存在 url 查询参数
- 在 Javascript 中将对象文本编码为 URL 查询字符串
- 删除 URL 查询字符串中的加号 (+)
- 在url查询参数中传递多个url
- javascript中获取api中的Url查询字符串
- 将javascript对象转换为url查询
- 如何从URL查询字符串中获取参数值
- 使用JS/RRails和下拉表单更新URL查询字符串
- 基于URL查询的后台切换
- 表单提交将取消URL查询字符串中的一个参数
- 在Chrome中使用XMLHttpRequest获取URL查询
- 在Flow Router上使用URL查询参数进行搜索