匹配不带查询字符串的 URL 路径

Match Url path without query string

本文关键字:URL 路径 字符串 查询      更新时间:2023-09-26

我想匹配 URL 中的路径,但忽略查询字符串。正则表达式应在查询字符串之前包含一个可选的尾部斜杠。

应提供有效匹配的示例网址:

/path/?a=123&b=123
/path?a=123&b=123

因此,字符串"/path"应与上述任一 url 匹配。

我尝试了以下正则表达式:(/path[^?]+).*

但这只会匹配类似于上面第一个示例的网址:/path/?a=123&b=123

知道我将如何让它在没有尾部斜杠的情况下与第二个示例匹配吗?

正则表达式是一项要求。

不需要正则表达式:

url.split("?")[0];

如果你真的需要它,那么试试这个:

'/path'?*.*

编辑 实际上最精确的正则表达式应该是:

^('/path)('/?'?{0}|'/?'?{1}.*)$

因为您想匹配/path/path//path?something/path/?something,仅此而已。请注意,?表示"最多一个",而'?表示问号。

顺便说一句:哪种路由库不处理查询字符串?我建议使用其他东西。

http://jsfiddle.net/bJcX3/

var re = /('/?[^?]*?)'?.*/;
var p1 = "/path/to/something/?a=123&b=123";
var p2 = "/path/to/something/else?a=123&b=123";
var p1_matches = p1.match(re);
var p2_matches = p2.match(re);
document.write(p1_matches[1] + "<br>");
document.write(p2_matches[1] + "<br>");