正确匹配URL内部路径的方法? (8)

时间:2013-07-31 14:09:48

标签: javascript

源自JavaScript,Good Parts,是匹配网址的正则表达式。

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

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

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

[^?#]*

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

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

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

澄清:我不想使用负向前看,因为这会模拟非字符集。

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

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

2 个答案:

答案 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 + FDF​​0到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: