2012-05-14 84 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("?") 
    ); 
} 

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

相关问题