是否存在一个已知的JavaScript正则表达式来匹配整个URL连接字符串?
protocol://user:password@hostname:12345/segment1/segment2?p1=val1&p2=val2
Run Code Online (Sandbox Code Playgroud)
我正在寻找一个正则表达式,它将帮助我将这样的连接字符串转换为对象:
{
protocol: 'protocol',
user: 'user',
password: 'password',
host: 'hostname:12345',
hostname: 'hostname',
port: 12345,
segments: ['segment1', 'segment2'],
params: {
p1: 'val1',
p2: 'val2'
}
}
Run Code Online (Sandbox Code Playgroud)
另外,我希望连接字符串的每个部分都是可选的,因此缺少的参数可以由环境中的值填充。
例子:
protocol://server:12345:12345 -仅用于端口user:password@user@:password@/segment1?p1=val1关于有效符号,标准RFC 3986规则应适用于所有零件。
我正在寻找可以在Node.js和所有浏览器中使用的东西。
我已经在connection-string中逐个进行了单独的解析,但是有一个问题-它不允许验证,即无法确定整个事情是否有效。
像这样吗?
function url2obj(url) {
var pattern = /^(?:([^:\/?#\s]+):\/{2})?(?:([^@\/?#\s]+)@)?([^\/?#\s]+)?(?:\/([^?#\s]*))?(?:[?]([^#\s]+))?\S*$/;
var matches = url.match(pattern);
var params = {};
if (matches[5] != undefined) {
matches[5].split('&').map(function(x){
var a = x.split('=');
params[a[0]]=a[1];
});
}
return {
protocol: matches[1],
user: matches[2] != undefined ? matches[2].split(':')[0] : undefined,
password: matches[2] != undefined ? matches[2].split(':')[1] : undefined,
host: matches[3],
hostname: matches[3] != undefined ? matches[3].split(/:(?=\d+$)/)[0] : undefined,
port: matches[3] != undefined ? matches[3].split(/:(?=\d+$)/)[1] : undefined,
segments : matches[4] != undefined ? matches[4].split('/') : undefined,
params: params
};
}
console.log(url2obj("protocol://user:password@hostname:12345/segment1/segment2?p1=val1&p2=val2"));
console.log(url2obj("http://hostname"));
console.log(url2obj(":password@"));
console.log(url2obj("?p1=val1"));
console.log(url2obj("ftp://usr:pwd@[FFF::12]:345/testIP6"));Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
915 次 |
| 最近记录: |