Son*_*ate 0 .net javascript regex
我看了一遍,还没有找到一个解决方案,以满足我对正常表达式模式的需求,该模式将匹配通用URL.我需要支持多种协议(带验证),localhost和/或IP寻址,端口和查询字符串.一些例子:
理想情况下,我希望该模式也支持提取各种元素(协议,主机,端口,查询字符串等),但这不是必需的.
(另外,出于我和未来读者的目的,如果你能解释这种模式,那将会有所帮助.)
RFC 3986/STD 0066(统一资源标识符(URI):通用语法)的附录B 提供了您需要的正则表达式:
附录B.使用正则表达式解析URI引用
由于"first-match-wins"算法与POSIX正则表达式使用的"贪婪"消歧方法相同,因此使用正则表达式解析URI引用的潜在五个组件是很自然和平常的.
以下行是用于将格式正确的URI引用分解为其组件的正则表达式.
Run Code Online (Sandbox Code Playgroud)^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))? 12 3 4 5 6 7 8 9上面第二行中的数字只是为了提高可读性; 它们表示每个子表达的参考点(即每个配对括号).我们将子表达式匹配的值
<n>称为$<n>.例如,将上面的表达式与之匹配Run Code Online (Sandbox Code Playgroud)http://www.ics.uci.edu/pub/ietf/uri/#Related导致以下子表达式匹配:
Run Code Online (Sandbox Code Playgroud)$1 = http: $2 = http $3 = //www.ics.uci.edu $4 = www.ics.uci.edu $5 = /pub/ietf/uri/ $6 = <undefined> $7 = <undefined> $8 = #Related $9 = Relatedwhere
<undefined>表示该组件不存在,如上例中的查询组件的情况.因此,我们可以确定五个组件的值Run Code Online (Sandbox Code Playgroud)scheme = $2 authority = $4 path = $5 query = $7 fragment = $9在相反的方向,我们可以使用第5.3节的算法从其组件重新创建URI引用.
至于针对特定方案验证URI ,您需要查看描述您感兴趣的方案的RFC,以获取验证URI对于该方案是否有效所需的详细信息.声称是.URI方案注册表位于http://www.iana.org/assignments/uri-schemes.html.
即便如此,你注定会遇到某种失败.考虑一下该file:计划.您无法验证它是否代表文件系统中的有效路径authority(除非您是权限).您可以做的最好的事情是验证它表示看起来像有效路径的东西.即便如此,一个Windows文件:url like file:///C:/foo/bar/baz/bat.txt(对于运行某种Windows的服务器)的任何东西都是无效的.运行*nix的任何服务器都可能会阻塞它(无论如何,驱动器号是什么?).