源自JavaScript,Good Parts,是匹配网址的正则表达式。
伪代码(每个数字代表一个子表达式)
/^(1)(2)(3)(4)(5)(6)(7)$/
在5点中是这个正则表达式和其他一些东西。
[^?#]*
非常简单,它只是一个非字符类,可以匹配除?
或#
之外的所有内容,因为这些内容稍后将用于匹配查询和片段标识符。
但是,我想用不使用的字符类替换它 - ^
我不确定的第一件事是Unicode是否可以在路径中使用。如果我不打算使用ASCII字符集。
澄清:我不想使用负向前看,因为这会模拟非字符集。
参考:以下是针对每个部分划分为不同行的完整正则表达式。
/^
(?:([a-zA-Z]+):)?
(\/{0,3})
([a-zA-Z0-9.\-]+)
(?::(\d+))?
(?:\/([^#?]*))?
(?:\?([^#]))?
(?:#(.*))?
$/
答案 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"
答案 1 :(得分:1)
允许的代码点是ASCII字母数字,并在此url spec中进行了描述。
网址代码为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的进一步参考可用here: