2012-05-14 120 views
1

是否有一個簡單的正則表達式來確定路徑是相對的還是散列?確定路徑是相對還是絕對

我想匹配這些:

../index.php 
js/funct.js 
./home/ 
php/file.php?url=http://www.google.com 
index.html#about=http://www.google.com 

但不是這些:

http://www.google.com 
http://google.com 
/index.php 
/
//google.com 
#div4 

這裏是我到目前爲止有:

/^[^#\/]|\/\//.test(url) 

但它不工作。有什麼辦法讓這個工作?

順便說一句我意識到//google.com在技術上是相對的,但我還是不想匹配的情況下

我需要這能夠告訴我是否需要處理一個pushState的後一個鏈接。試想,如果我開始/然後pushState d到/page1/那麼有'index2.html' A HREF鏈接本來是要到/index2.html,但現在會去/page1/index2.html

所以我需要檢查這些類型的相對路徑。

+0

不是很清楚。有'相對'和'絕對'類型的路徑。兩者都可能包含散列。你想確定什麼? – VisioN

+0

從您的示例中,只有以「http://」開頭的兩個URI是絕對的。其他9個都是相對的。 – Quentin

+0

@VisioN:查看編輯 – qwertymk

回答

0

它不應該以斜槓或散列開頭,並且不應該包含雙斜線(如果沒有問號或散列之前的話)?我不會用一個單一的正則表達式來測試,匹配「沒有雙斜槓」會非常複雜。

function test(s) { 
    return s.charAt(0) != "#" 
     && s.charAt(0) != "/" 
     && (s.indexOf("//") == -1 
     || s.indexOf("//") > s.indexOf("#") 
     || s.indexOf("//") > s.indexOf("?") 
    ); 
} 

會更容易,更清晰和更快。

相關問題