2011-08-09 58 views
1

我想获得通过JavaScript的URL路径,
例如,我有以下网址:
javascript,如何获取url路径?

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

可能重复[?我如何解析URL到JavaScript的主机名和路径(http://stackoverflow.com/questions/736513/how-do-i-parse -a-url-into-hostname-and-path-in-javascript) –

回答

3

这似乎是一个没有明确的解决方案,因为没有具体的定义,你想从URL的末尾删除什么。

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

这将很容易规范化尾部斜线(最后两个例子)。

如果这是您一直想要的,那么删除最后一条路径会很容易,但除非您愿意在URL的末尾添加一些可以区分/index.php/blah的规则,以便算法知道何时删除一个,但不是另一个,你所要求的是不可能的。由于您已经定义了该问题,因此代码无法知道是否应该删除http://localhost:8080/blah/blah末尾的 blah

例如,此代码将删除查询参数和URL的最后一部分,但这只适用于四个示例中的三个,但在最后删除的内容中存在歧义:

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

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

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

对于最后一个网址,你可以看到,该算法在年底作为文件名标识/blah并删除它,因为没有办法知道这是部分路径或文件名。

如果你愿意制定一个新的规则,即文件名必须有文件扩展名,最后一个路径名没有文件名时不会有扩展名,那么可以编写这样一个算法来处理最后一条案件。

OK,一个新的规则,在最后一个文件名是在它的一段话,那么,你可以使用这个:http://jsfiddle.net/jfriend00/LpauM/,并产生这样的结果:这是显示在此小提琴

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

四个测试网址:

http://localhost:8080/blah/blah/ 
http://localhost:8080/blah/blah/ 
http://localhost:8080/blah/blah/ 
http://localhost:8080/blah/blah/ 
+0

我添加了一个实际的代码示例和一个jsFiddle,它显示它在行动中。 – jfriend00

+0

你是仪式,我们可以通过url结尾的“dot”来知道它是否是文件名。无论如何,感谢jfriend,你的回答非常有帮助 –

+0

为文件名检测添加了新版本的代码。 – jfriend00