2017-08-25 20 views
1

假設我們有以下網址:的Javascript:有選擇地刪除從URL中的散列(或散列),從而使URL仍然有效或可用

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 
.................................... 

多這樣的排列,你得到了點。如何從這類URL中選擇性地移除「無關」哈希而不是影響這些URL的功能(以便它們仍然是完整鏈接或圖像)?

例如,從這個列表中的數字1開始,我希望從#3 hash0和#hash1的2中刪除#hash0,從3開始我想保留它,因爲它後面跟着路徑的延續(是的,這是可能的,檢查here),從4刪除#hash1,從5保留它,但從6刪除#hash1,...,從9我認爲保留它,因爲它可能與查詢有關(雖然不確定),依此類推。基本上我希望只刪除那些沒有任何可用的散列(如路徑,查詢,圖像文件等) - 像#top,#bottom等「無關」散列指的是當前頁面。我正在研究的東西,也涉及從相對的獲取絕對URL(藉助於新的錨點的href或新的URL對象的href),所以一個解決方案(如here),可以「融入」與location object's properties(如。協議,。主機,.pathname,。搜索,.hash等)是更可取的 - 因爲它可能是更「可信」,因爲它是內置的,但一個好的(和更短的)正則表達式是可以接受的以及。總而言之,較短的解決方案是可取的,因爲我不希望我的項目爲分析整個當前URL時遇到的每個鏈接或圖像鏈接做額外的不必要的工作。

+0

你怎麼知道哪個散列 「無關」?他們改變了嗎?我首先看'String.replace()' – mhodges

+0

@mhodges Hashes後面沒有有效的路徑/查詢/圖像鏈接部分在我的情況下是「無關緊要的」。例如,3,5或7(甚至9)的散列值或4,6或8中的第一個散列值是相關的,因爲它們之後是「哈希」以外的URL部分。 –

回答

1

也許這是你想要的,用一個正則表達式。

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);
.as-console-wrapper { max-height: 100% !important; top: 0; }

+0

是的,這也是我的想法,但它也需要包括潛在的有效查詢或圖像... –

+0

問題是,除非您不指定白名單或黑名單,否則任何解決方案只是一個嘗試。 –

+0

我知道 - 這就是爲什麼我在這裏問這個問題。如果我確實有防彈解決方案,我不會問);但是,我在我的問題中解釋了一般「白名單」的外觀:有效路徑,有效查詢,有效圖像等。基本上任何不是「簡單哈希」的東西。如果我可以將可用的散列作爲URL自己處理,我可以簡單地分析每個散列以查找其他相關的部分,並排除不包含這些部分的散列(例如_h = location.hash; if((h.path = ==「」)&&(h.search ===「」)&&(!h.endsWith(「。jpg」))){h =「」;} _)等等。 –

相關問題