【发布时间】:2016-11-05 05:06:13
【问题描述】:
我想使用正则表达式智能地解析 url 查询参数。
我不得不考虑的事情: 1) 参数可能有问题 2)只有某些参数必须匹配
给定一个查询字符串:“?param1=test1¶m2=test2&parm3=test3” 我想运行 javascript 正则表达式来解析 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。有点困惑。
谢谢!
【问题讨论】:
-
用javascript标签添加
-
您期望的替换输出是什么?
-
我希望 $0 和 $1 输出 'test1' 和 'test3' 它实际上可能是一个 javascript 限制:stackoverflow.com/questions/3537878/…
-
您正在寻找那些捕获组,但这个正则表达式只匹配一次。我仍然不明白您对该操作的预期输出是什么。您想将参数 1 和 3 中的值提取到像
['test1', 'test3']这样的数组中,还是要替换它们?是否要替换整个字符串? -
Javascript
replace将仅用回调的返回值替换匹配的文本。该捕获组未定义,因为您仅访问该交替组的最终重复。 tl;博士 - 我看不到这个正则表达式以它的编写方式解决任何现实世界的问题。您必须向我们提供任何有意义的帮助的预期输出:)。
标签: javascript regex url query-parameters