我想匹配 URL 中的路径,但忽略查询字符串。正则表达式应该在查询字符串之前包含一个可选的斜杠。
应该给出有效匹配的示例 url:
/path/?a=123&b=123
/path?a=123&b=123
所以字符串 '/path' 应该匹配上述任一 url。
我尝试了以下正则表达式:(/path[^?]+).*
但这只会匹配上面第一个示例中的 url:/path/?a=123&b=123
知道我将如何让它与第二个示例匹配而没有斜杠吗?
正则表达式是一项要求。
我想匹配 URL 中的路径,但忽略查询字符串。正则表达式应该在查询字符串之前包含一个可选的斜杠。
应该给出有效匹配的示例 url:
/path/?a=123&b=123
/path?a=123&b=123
所以字符串 '/path' 应该匹配上述任一 url。
我尝试了以下正则表达式:(/path[^?]+).*
但这只会匹配上面第一个示例中的 url:/path/?a=123&b=123
知道我将如何让它与第二个示例匹配而没有斜杠吗?
正则表达式是一项要求。
不需要正则表达式:
url.split("?")[0];
如果你真的需要它,那么试试这个:
\/path\?*.*
编辑实际上最精确的正则表达式应该是:
^(\/path)(\/?\?{0}|\/?\?{1}.*)$
因为你想匹配/path
or /path/
or or /path?something
or/path/?something
没有别的。请注意,这?
意味着“最多一个”,而\?
意味着问号。
BTW:什么样的路由库不处理查询字符串?我建议使用其他东西。
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>");