2013-07-31 145 views
1

源自JavaScript的The Good Parts是一個匹配URL的正則表達式。在URL中匹配路徑的正確方法是什麼? (8)

僞代碼(每個數字代表一個子表達)

/^(1)(2)(3)(4)(5)(6)(7)$/ 

在5點是此正則表達式與一些其他的事情。

[^?#]* 

很簡單,這僅僅是一個不字符類,除了?#匹配一切,因爲這些將在稍後被用來匹配查詢和片段標識符。

不過,我想與不不使用字符類來代替本 - ^

的第一件事情我不知道的是與否的Unicode可以在路徑中使用。如果它不能,我打算使用ASCII字符集。

澄清:我不想使用負面預測,因爲它模擬不是字符集。

參考:這裏是完整的正則表達式分解成不同的行爲每個部分。

/^ 
(?:([a-zA-Z]+):)? 
(\/{0,3}) 
([a-zA-Z0-9.\-]+) 
(?::(\d+))? 
(?:\/([^#?]*))? 
(?:\?([^#]))? 
(?:#(.*))? 
$/ 
+0

不要使用'不^'...所以你的意思基本上是'[^^] *'?你應該嘗試一下然後 – devnull69

+0

看到[purl](https://github.com/allmarkedup/purl/blob/master/purl.js)正則表達式 – ostapische

+0

爲什麼你想要做到這一點,而通用的足夠允許Unicode? –

回答

1

允許的代碼點是ASCII字母數字並在此url spec描述。

的URL代碼點是ASCII字母, 「!」, 「$」, 「&」, 「'」, 「(」, 「)」, 「*」, 「+」,「,」 「 - 」,「。」,「/」,「:」,「;」,「=」,「?」,「@」,「_」,「〜」, 和範圍U + U + 10000到U + 1FFFD,U + 20000到U + 2FFFD,U + 30000到 U + 3FFFD,U + UFF到U + FDCF,U + E000到U + FDCF, U + 40000至U + 4FFFD,U + 50000至U + 5FFFD,U + 60000至U + 6FFFD, U + 70000至U + 7FFFD,U + 80000至U + 8FFFD,U + 90000至U + 9FFFD,U + A0000 U + E0000到U + EFFFFD,U + F0000到U + FFFFD,U + 100000到U + FFFFD,U + B0000到U + BFFFD,U + C0000到U + CFFFD,U + D0000到U + DFFFD, U +到U + 10FFFD。

由W3

更多參考,請here:

+0

作爲'!$&'()* +, - 。/:; =?@_〜' – mplungjan

+0

會不會更容易讀取,我直接複製它,但是。 –

4

你也可以方便的瀏覽器解析邏輯:

var parser = document.createElement('a'); 
parser.href = "http://example.com:3000/pathname/?search=test#hash"; 

parser.protocol; // => "http:" 
parser.hostname; // => "example.com" 
parser.port;  // => "3000" 
parser.pathname; // => "/pathname/" 
parser.search; // => "?search=test" 
parser.hash;  // => "#hash" 
parser.host;  // => "example.com:3000" 
相關問題