javascript,如何获取url路径?

时间:2011-08-09 02:30:10

标签: javascript

我想通过javascript获取网址路径,
例如,我有这些网址:

http://localhost:8080/blah/blah/index.php?p=1

http://localhost:8080/blah/blah/index.php

http://localhost:8080/blah/blah/

http://localhost:8080/blah/blah

我希望得到:http://localhost:8080/blah/blah/ 有人请帮助我

1 个答案:

答案 0 :(得分:3)

这似乎是一个没有明确解决方案的暧昧问题,因为没有具体的定义,您希望从URL的末尾删除。

删除查询参数很容易(第一个例子)。

标准化尾部斜杠很容易(最后两个例子)。

如果这是您一直想要的,那么删除最后一段路径会很容易,但除非您愿意添加更多可以区分/index.php/blah的规则。 URL的结尾,以便算法知道何时删除一个,而不是另一个,您所要求的是不可能的。由于您已经定义了问题,代码无法知道是否 <{1}}末尾的blah应该被删除。

例如,此代码将删除查询参数和URL的最后一部分,但这仅适用于四个示例中的三个,但是最终会出现关于要删除的内容的歧义:

http://localhost:8080/blah/blah

这里正在运行你的所有四个例子:http://jsfiddle.net/jfriend00/2Q4Ue/。它返回以下四种情况的结果:

function cleanURL(url) {
    return(url.replace(/\?.*$/, "").replace(/\/[^\/]*$/, "") + "/");
}

对于最后一个URL,您可以看到该算法最后将http://localhost:8080/blah/blah/ http://localhost:8080/blah/blah/ http://localhost:8080/blah/blah/ http://localhost:8080/blah/ 标识为文件名并将其删除,因为无法知道该部分是路径还是文件名。

如果您愿意制定一个新规则,即文件名必须具有文件扩展名,并且当没有文件名时最后一段路径名将永远不会有扩展名,那么可以编写这样的算法来处理最后一个案例

好的,有了一个新规则,即文件末尾是带有句号的任何东西,那么,你可以使用它:

/blah

这个小提琴显示:http://jsfiddle.net/jfriend00/LpauM/并为四个测试网址生成此结果:

function cleanURL(url) {
    return(url.replace(/\?.*$/, "")
           .replace(/\/[^\/]*\.[^\/]*$/, "")
           .replace(/\/$/, "") + "/");
}