Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/457.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript,如何获取url路径?_Javascript - Fatal编程技术网

javascript,如何获取url路径?

javascript,如何获取url路径?,javascript,Javascript,我想通过javascript获取url路径, 例如,我有以下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/ 任何人请帮助我这似乎是一个模棱两可的问题

我想通过javascript获取url路径,
例如,我有以下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/

任何人请帮助我

这似乎是一个模棱两可的问题,没有明确的解决方案,因为没有具体定义要从URL末尾删除什么

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

很容易规范化尾部斜杠(最后两个示例)

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

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

function cleanURL(url) {
    return(url.replace(/\?.*$/, "").replace(/\/[^\/]*$/, "") + "/");
}
在这里,它将在您的四个示例上运行:。它将返回以下四种情况的结果:

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

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

好的,根据一条新规则,文件名的结尾是任何带有句点的内容,然后,您可以使用以下内容:

function cleanURL(url) {
    return(url.replace(/\?.*$/, "")
           .replace(/\/[^\/]*\.[^\/]*$/, "")
           .replace(/\/$/, "") + "/");
}
它显示在这个fiddle:中,并为四个测试URL生成以下结果:

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

我添加了一个实际的代码示例和一个JSFIDLE,在实际操作中显示了它。如果是rite,我们可以通过url末尾的“点”知道它是文件名。无论如何,谢谢jfriend,你的回答非常有用OK,问题是当我们访问localhost:8080/blah/时,它将与localhost:8080/blah/index.php(默认文档)相同,也与localhost:8080相同,这就是重点。它的实际路径是localhost:8080/blah/index.php,但是当我们访问localhost:8080/blah/apache时,我们知道index.php文件是将要执行的默认文件。所以我们不知道,当有人键入localhost:8080/blah或localhost:8080/blah/或localhost:8080/blah/index.php时,我想获取根url以加载其他文件。可能是