如何使用散列提取域?

时间:2019-05-02 23:34:43

标签: javascript jquery

我想从位置地址栏中提取没有哈希值且没有长随机ID的域,使其显示如下:

http://test.example.com/#inbox

这是完整的网址:

http://test.example.com/#inbox/U2FsdGVkX19stSSdMXLZq5v7bOgzRLtaM7Lr1t+lWpI=

这是我到目前为止尝试过的:

var url = location.hash.split('#inbox')[1];

我也尝试过这个:

var url = $(location).attr("href").split('/')[2];

不幸的是,没有长的随机ID,我没有得到我想要提取的域和哈希值。

尝试时,它会提取域名和哈希(不带随机ID)以获取http://test.example.com/#inbox之类的URL的返回输出。

3 个答案:

答案 0 :(得分:2)

我将使用indexOf()查找'#'字符的位置。由于该网址不能包含'#',因此可以安全地假设第一个'#'将是您感兴趣的那个网址。

然后,我将再次搜索'/'来搜索indexOf(),这样'#''/'之间的单词可以更改,并且一切仍按预期运行。 / p>

该位置是'/'的位置,并且可以返回之前的任何内容,这就是String.sub()函数的作用,并且它返回您要查找的URL:

var pos = location.href.indexOf('#')
pos = location.href.indexOf('/', pos)
var url = location.href.substr(0, pos)

尽管我不确定它是否完全可移植,但是另一种方法是使用位置字段,如下所示:

var url = location.origin + location.pathname + "#inbox"

如果"#inbox"部分可以更改,则可以像下面这样调整代码或在location.hash中搜索斜线:

var pos = location.hash.indexOf('/')
var url = location.origin + location.pathname + location.hash.sub(0, pos)

无论哪种方法,无论哪种方法都应该足够快(特别是因为您不需要循环访问此类方法)。

答案 1 :(得分:0)

我得到了整个URL,找到了“#”所在的位置,在其“#” +单词“ inbox”的计数中添加了6,并删除了URL的其余部分:

nav ul li.linav:nth-child(1) a:before

答案 2 :(得分:-2)

尝试以下代码:

// Complete URL
var url = 'http://test.example.com/#inbox/U2FsdGVkX19stSSdMXLZq5v7bOgzRLtaM7Lr1t+lWpI=';

var desiredResult = url.match(/.*\/\#inbox\//)[0];
console.log(desiredResult.substring(0, desiredResult.length - 1)); // this will output 'http://test.example.com/#inbox'