使用正则表达式提取url路径

时间:2014-12-04 10:54:36

标签: javascript regex regex-group

方案

我想从document.location中提取路径字符串,不包括前导斜杠。 例如,如果网址是:

http://stackoverflow.com/questions/ask

我会得到:

questions/ask

这应该是直截了当的:

/* group everything after the leading slash */
var re = /\/(.+)/gi;
var matches = document.location.pathname.match(re);
console.log(matches[0]);

但是如果我在firebug控制台中运行这个片段,我仍然会得到一个领先的斜杠。 我已经测试了regexp,正则表达式引擎正确地提取了该组。

问题

如何正确获取组1字符串?

3 个答案:

答案 0 :(得分:2)

如果你只是想获得没有前导斜杠的路径名,你真的不需要正则表达式。由于location.pathname始终以/开头,因此您只需从第一个索引中获取子字符串:

document.location.pathname.substr(1) // or .slice(1)

答案 1 :(得分:1)

使用正则表达式,您可以:

var m = 'http://stackoverflow.com/questions/ask'.match(/\/{2}[^\/]+(\/.+)/);
console.log(m[1]); /questions/ask

答案 2 :(得分:1)

您是说尾随还是斜线?从你的帖子看起来像是领先的斜线。

document.location.pathname.replace(/^\//,"")

顺便说一下,你的正则表达式是正确的,但你只需删除gi并阅读matches[1]而不是matches[0],因为matches[0]是整个字符串匹配的regexp,而matches[1]是匹配字符串中的捕获部分(在regexp中用括号引用)。

var matches = document.location.pathname.match(/\/(.+)/);
console.log(matches); // ["/questions/ask", "questions/ask"]