获取URI的路径部分

时间:2014-05-28 15:39:21

标签: javascript regex

如何匹配这些网址中的/sk/en/fg/tr

http://example.com/sk/en
http://example.com/fg/tr

网址可以从http://https://www.开始,但不必如此。在第一个和第二个斜杠之后总是有两个字母,字母是字母的,无论如何都可以调用。

2 个答案:

答案 0 :(得分:7)

不需要使用正则表达式。

var url = new URL("http://example.com/sk/en");
console.log(url.pathname); // logs /sk/en

这适用于http和https,但是如果您需要支持没有协议的URL(顺便说一句,无效的网址),只需将http添加到它们之前。

或者,如果您需要支持旧版浏览器,则可以直接使用DOM:

var a = document.createElement("a"); // create a link element
a.href = "http://example.com/sk/en";
console.log(a.pathname); // /sk/en

URL API相当新,所以它需要IE10 +和相对较新的Chrome / Firefox才能运行。

createElement方法也适用于旧版本的IE,因此如果您需要支持旧浏览器,请选择它。


你在评论中提到你需要路径后面的前两位,一旦我们有了路径名,我们就可以拆分它。我们假设我们有路径变量,我们可以使用indexOf并将其与0

进行比较
var path = "/ab/cd/ef/gh?foo=bar";
console.log(path.indexOf("/ab/cd") === 0); // true, since /ab/cd is exists in the path
                                           // and its start position is 0
console.log(path.indexOf("/cd/ef")); // 3 and not 0, since it's not at the first position
console.log(path.indexOf("/en/us")); // -1, not found at all.

答案 1 :(得分:-1)

请参阅下面的修改以获取更新的答案。

但正如Ben所说,不需要RegEx。但他的方法无法访问当前的浏览器窗口网址。要获取主机名后面的当前窗口/选项卡路径,请使用`window.location.pathname'。

所以:

alert(window.location.pathname);

此页面会提醒:

/questions/23916101/url-regex-matching-javascript

修改 要在完整路径名中查找,这里是您在示例中需要的正则表达式,但是使用我上面的window.location.pathname来获取浏览器的当前url而不是示例的已创建对象(如果&# 39;你所追求的是什么。

var url1 = new URL("http://example.com/sk/en/abc/def");
var url2 = new URL("http://example.com/fg/tr/abc/def");
console.log(url1.pathname.match(/\/sk\/en/));
console.log(url2.pathname.match(/\/fg\/tr/));

这将匹配并记录结果,如果该表达式包含在路径名中的任何位置,如您所提到的那样。如果您想要在路径名的开头验证它,只需使用^修改正则表达式(例如/^\/sk\/en/