Javascript:有选择地从网址中删除哈希(或哈希),以使网址保持有效或可用

时间:2017-08-25 17:11:40

标签: javascript url hash

假设我们有以下网址:

1. http://example.com#hash0
2. http://example.com#hash0#hash1
3. http://example.com#hash0/sample.net/
4. http://example.com#hash0/sample.net/#hash1
5. http://example.com#hash0/image.jpg
6. http://example.com#hash0/image.jpg#hash1
7. something.php#?type=abc&id=123
8. something.php#?type=abc&id=123#hash0
9. something.php/?type=abc&id=#123
....................................

这种更多的排列,你明白了。我如何有选择地删除"无关紧要的"这种网址没有的哈希值会影响这些网址的功能(以便它们保持完整的链接或图片)?

例如,从这个列表中的数字1开始,我希望删除#hash0,从#hash0和#hash1中删除#3,我希望保留它,因为它后面是路径的延续(是的,它可能,检查here),从4中仅删除#hash1,5从保留它,但从6删除#hash1,...和9我认为保留它,因为它可能与查询有关(虽然不确定),依此类推。基本上我只想删除那些没有任何可用的哈希值(如路径,查询,图像文件等) - "无关紧要"像#top,#bottom等的哈希,指的是当前页面。

我正在处理的事情还包括从相对的网址获取绝对网址(借助新主播的href或新网址对象的href),这样一个解决方案(像here),可以"融入"使用location object's properties(如.protocol,.host,.pathname,.search,.hash等)是可取的 - 因为它可能更可靠"值得信赖"因为它是内置的,但一个好的(和更短的)正则表达式也是可以接受的。总而言之,更短的解决方案更可取,因为我不希望我的项目为它解析整个当前URL时遇到的每个链接或图像链接做额外的不必要的工作。

1 个答案:

答案 0 :(得分:1)

也许这就是你想要的,带有正则表达式。

#pragma pack
var urls = [
        'http://example.com#hash0',                   // remove
        'http://example.com#hash0#hash1',             // remove
        'http://example.com#hash0/sample.net/',       // keep
        'http://example.com#hash0/sample.net/#hash1', // remove #hash1
        'http://example.com#hash0/image.jpg',         // keep
        'http://example.com#hash0/image.jpg#hash1',   // remove #hash1
        'something.php#?type=abc&id=123',             // keep
        'something.php#?type=abc&id=123#hash0',       // remove #hash0
        'something.php/?type=abc&id=#123',            // remove #123
    ],
    result = urls.map(h => h.replace(/(?:#[^#\/\?\.]*)*#[^#\/\?\.]*$/gi, ''));
    
console.log(result);