regex URL连接字符串的正则表达式

s3fp2yjn  于 2023-03-20  发布在  其他
关注(0)|答案(2)|浏览(127)

是否有一个已知的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中做了一个单独的逐段解析,但问题是-它不允许验证,即判断整个过程是否有效。

lf3rwulv

lf3rwulv1#

Java数据源连接URL模式示例(如果需要):
Sample

java #正则表达式

ws51t4hk

ws51t4hk2#

像这样?

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"));

正则表达式模式here on regex101的测试

相关问题