【问题标题】:Match Url path without query string匹配没有查询字符串的 URL 路径
【发布时间】:2013-10-27 21:27:08
【问题描述】:

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

应该给出有效匹配的示例网址:

/path/?a=123&b=123

/path?a=123&b=123

所以字符串 '/path' 应该与上述任一 url 匹配。

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

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

知道如何让它匹配第二个示例而没有斜杠吗?

正则表达式是一项要求。

【问题讨论】:

  • (/path[?]+|/path/[?]+).*

标签: javascript regex


【解决方案1】:

不需要正则表达式:

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

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

\/path\?*.*

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

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

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

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

【讨论】:

  • 我应该注意到我需要使用正则表达式。我正在使用一个使用正则表达式匹配 url 的路由库。
  • @JCoder23 又更新了一次
  • 我将 CasperJS 与 PhantomJS 网络服务器模块一起使用。 Web服务器模块是一个基本的http服务器(Mongoose),它没有内置路由。我发现有人为它写了一个routing library,它不支持查询字符串,因为如果附加查询字符串,urls will not match到网址。所以我需要这个正则表达式来匹配没有查询字符串的路由,然后我修补路由库以正确解析查询字符串并将其添加到路由的请求对象中。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-10
    • 1970-01-01
    • 1970-01-01
    • 2021-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-17
    相关资源
    最近更新 更多