还有另一个document.referrer.pathname事

时间:2012-11-21 00:44:23

标签: javascript regex referrer

我正在寻找相当于“document.referrer.pathname”的东西。我知道在SO上还有其他与此类似的问题,但它们都没有处理所有用例。例如:

http://example.com/RESULT

http://example.com/RESULT/

http://example.com/RESULT?query=string

所有示例都应该返回:

RESULT

https://example.com/EXTENDED/RESULT/

EXTENDED/RESULT

有些人可能希望包含尾随斜杠,但我不这样做,因为我与引荐列表匹配。

我开始时:

document.referrer.match(/:\/\/.*\/(.*)/)[1]

我正在努力添加查询字符串解析。

谢谢!

3 个答案:

答案 0 :(得分:3)

如果您将URL作为字符串,则可以创建空锚并将其作为href给予它们以访问路径名:

var url = 'http://example.com/RESULT?query=string', // or document.referrer
    a = document.createElement('a');
a.href = url;
var result = a.pathname.replace(/(^\/|\/$)/g,'');

我在这里为您设置了一个测试示例:http://jsfiddle.net/eWydy/

答案 1 :(得分:1)

试试这个正则表达式:

.match(/\/\/.*?\/(.*?)\/?(\?.*)?$/)[1]

DEMO

答案 2 :(得分:0)

如果您不想为其创建新元素或依赖a.pathname,我建议您使用indexOfslice

function getPath(s) {
    var i = s.indexOf('://') + 3, j;
    i = s.indexOf('/',i) + 1;  // find first / (ie. after .com) and start at the next char
    if( i === 0 ) return '';
    j = s.indexOf('?',i); // find first ? after first / (as before doesn't matter anyway)
    if( j == -1 ) j = s.length; // if no ?, use until end of string
    while( s[j-1] === '/' ) j = j - 1; // get rid of ending /s
    return s.slice(i, j); // return what we've ended up at
}
getPath(document.referrer);

如果你想要正则表达式,也许这就是

document.referrer.match(/:\/\/[^\/]+[\/]+([^\?]*)[\/]*(?:\?.*)?$/)[1]

确实“找到第一个://,一直持续到下一个/,然后在?或最后一个{?之前获取所有不是/的内容1}}或字符串的结尾并捕获它“,这与我上面的函数基本相同。