匹配没有查询字符串的URL路径

时间:2013-10-27 21:27:09

标签: javascript regex

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

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

/path/?a=123&b=123

/path?a=123&b=123

因此字符串'/ path'应匹配以上任一网址。

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

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

任何想法如何让它与第二个例子相匹配而没有尾随斜线?

正则表达式是一项要求。

2 个答案:

答案 0 :(得分:4)

不需要regexp:

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

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

\/path\?*.*

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

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

因为您要匹配/path/path//path?something/path/?something,而不是其他任何内容。请注意,?表示“最多一个”,而\?表示问号。

BTW:哪种路由库不处理查询字符串?我建议使用别的东西。

答案 1 :(得分:3)

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>");