【发布时间】:2017-12-17 19:19:00
【问题描述】:
是否有已知的 JavaScript 正则表达式来匹配整个 URL 连接字符串?
protocol://user:password@hostname:12345/segment1/segment2?p1=val1&p2=val2
我正在寻找一个可以帮助我将这样的连接字符串转换为对象的正则表达式:
{
protocol: 'protocol',
user: 'user',
password: 'password',
host: 'hostname:12345',
hostname: 'hostname',
port: 12345,
segments: ['segment1', 'segment2'],
params: {
p1: 'val1',
p2: 'val2'
}
}
另外,我希望连接字符串的每一部分都是可选的,因此缺少的参数可以由环境中的值填充。
示例:
protocol://server:12345-
:12345- 仅适用于端口 user:password@user@:password@/segment1?p1=val1- 等等……
当涉及到有效符号时,标准RFC 3986 规则应适用于所有部分。
我正在寻找适用于 Node.js 和所有浏览器的东西。
我已经在 connection-string 中进行了一个单独的解析,但问题是 - 它不允许验证,即判断整个事情是否有效。
【问题讨论】:
-
@WiktorStribiżew 那里没有答案可以支持 URL 的所有部分都是可选的,根据我的示例。
-
我不认为正则表达式是解决这个问题的好主意。为什么不直接手动解析 URL,然后构造所需的对象呢?
-
为什么要在这种情况下使用正则表达式?为什么不用这个函数,比如这个:locutus.io/php/url/parse_url?
-
@SergeyKhalitov 我不知道它是否有效,如果它在我描述的条件下有效,它会给出答案,而不是我为什么不使用它的问题 - 因为我显然,以前从未见过。
标签: javascript regex