我想通过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/
有人请帮助我
答案 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(/\/$/, "") + "/");
}