0

我正在寻找“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]

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

谢谢!

4

3 回答 3

3

如果您将 URL 作为字符串,您可以创建空锚并将 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/

于 2012-11-21T00:51:47.610 回答
1

试试这个正则表达式:

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

演示

于 2012-11-21T01:46:09.873 回答
0

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

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]

它确实“找到第一个://,继续直到下一个/,然后获取不是?直到 a?或字符串的最后一个/或结尾的所有内容并捕获它”,这与我上面所做的功能基本相同。

于 2012-11-21T00:58:11.027 回答