1

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

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

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

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

[^?#]*

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

但是,我想用不使用的字符类替换它 -^

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

澄清: 我不想使用负面展望,因为这模拟了一个非字符集。

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

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

2 回答 2

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"
于 2013-07-31T14:21:36.577 回答
1

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

URL 代码点是 ASCII 字母数字、“!”、“$”、“&”、“'”、“(”、“)”、“*”、“+”、“”、“-”、“。 "、"/"、":"、";"、"="、"?"、"@"、"_"、"~" 以及 U+00A0 到 U+D7FF、U+ 范围内的代码点E000 到 U+FDCF、U+FDF0 到 U+FFEF、U+10000 到 U+1FFFD、U+20000 到 U+2FFFD、U+30000 到 U+3FFFD、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+AFFFD,U+B0000 到 U+ BFFFD,U+C0000 到 U+CFFFD,U+D0000 到 U+DFFFD,U+E1000 到 U+EFFFD,U+F0000 到 U+FFFFD,U+100000 到 U+10FFFD。

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

于 2013-07-31T14:50:08.083 回答