我正在寻找相当于“document.referrer.pathname”的东西。我知道在SO上还有其他与此类似的问题,但它们都没有处理所有用例。例如:
http://example.com/RESULT?query=string
所有示例都应该返回:
RESULT
或
https://example.com/EXTENDED/RESULT/
EXTENDED/RESULT
有些人可能希望包含尾随斜杠,但我不这样做,因为我与引荐列表匹配。
我开始时:
document.referrer.match(/:\/\/.*\/(.*)/)[1]
我正在努力添加查询字符串解析。
谢谢!
答案 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)
答案 2 :(得分:0)
如果您不想为其创建新元素或依赖a.pathname
,我建议您使用indexOf
和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]
确实“找到第一个://
,一直持续到下一个/
,然后在?
或最后一个{?
之前获取所有不是/
的内容1}}或字符串的结尾并捕获它“,这与我上面的函数基本相同。