匹配URL中路径的正确方式?(8)

Correct way to match path inside a URL? (8)

本文关键字:方式 URL 路径 匹配      更新时间:2023-09-26

源于JavaScript,The Good Parts是用于匹配URL的正则表达式。

伪代码(每个数字代表一个子表达式)

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

在5点是这个正则表达式和其他一些东西。

[^?#]*

非常简单,它只是一个非字符类,用于匹配除?#之外的所有内容,因为这些内容稍后将用于匹配查询和片段标识符。

但是,我想用一个不使用非^ 的字符类来代替它

我不确定的第一件事是Unicode是否可以在路径中使用。如果不能,我打算使用ASCII字符集。

澄清:我不想使用负面前瞻,因为这模拟了非字符集。

参考:以下是完整的正则表达式,每个部分分为不同的行。

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

您还可以简化浏览器解析逻辑:

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"

允许的代码点是ASCII字母数字,并在此url规范中进行了描述。

URL代码点为ASCII字母数字、"!"、"$"、"&"、"'"、"(",")","*","+",",","-",".","/",":",";","=","?","@","_","~",以及范围U+00A0到U+D7FF、U+E000到U+FDCF中的码点,U+FDF0到U+FFEF,U+10000到U+1FFD,U+20000到U+2FFD,U+30000到U+3FFD,U+40000到U+4FFD,U+50000到U+5FFD,U+60000到U+6FFD,U+70000到U+7FFFD,U+80000到U+8FFFD,U+90000到U+9FFFD,U+A000到U+AFFD,U+B0000至U+BFFFD,U+C000至U+CFFD,U+D0000至U+DFFFD,U+E1000到U+EFFD,U+F0000到U+TFFFFD,U+100000到U+10FFFD。

W3的进一步参考可在此处获得: