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

2023-11-30

是否有已知的 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 和所有浏览器中工作的东西。

我已经在其中逐个进行了单独的解析连接字符串,但问题是 - 它不允许验证,即判断整个事情是否有效。


像这样的东西?

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

正则表达式模式的测试在 regex101 上

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

URL 连接字符串的正则表达式 的相关文章

  • WebGL iOS 渲染为浮点纹理

    我正在尝试在 iOS Safari 上的 WebGL 中渲染浮点纹理 而不是在本机应用程序中 我已经设法让 iOS 读取手动 例如从 JavaScript 创建的浮点纹理 但是当我创建浮点类型的帧缓冲区并使用 GPU 渲染到其中时 它不起作
  • 我无法注入带有“!important”规则的样式[重复]

    这个问题在这里已经有答案了 我尝试使用以下代码注入样式 document body style color green important Per CSS 级联引用 http www w3 org TR CSS2 cascade html
  • moment.calendar() 没有时间

    我想使用不带时间的 moment calendar 选项 所以而不是 上周二下午 5 点 我想要 上周二 有人知道 Moment 现在是否有解决方案吗 我找到了这个小提琴http jsfiddle net nawxZ http jsfidd
  • 使用什么事件来在选择文本框中的值时显示警报消息

    我正在使用 jquery 的自动完成 api 来从数据库中获取名称 但是我想在从显示的文本框中选择名称时显示一条警报消息 我将显示一个图像以便更好地理解 当我输入 S 时 它将显示所有包含 S 的记录 所以问题是 如果我选择例如 Spars
  • Angular - Safari 无法正确显示 DOM

    我是 Angular 的新手 使用 Angular 4 我尝试通过在关联的组件类文件中设置属性来更新特定元素 但是 除非我尝试强制重新绘制网页 通过调整窗口大小等 否则页面不会更新 我打开检查器 看到 DOM 已更改 但显示与元素检查器中的
  • JavaScript 逻辑赋值是如何工作的?

    在 javascript 中 如果我们有一些代码 例如 var a one var b q a alert b 逻辑 OR 运算符会将 a 的值分配给 b 并且警报将为 一 这仅限于作业还是我们可以在任何地方使用它 似乎空字符串被视为与未定
  • 如何在WebBrowser控件中注入Javascript?

    我试过这个 string newScript textBox1 Text HtmlElement head browserCtrl Document GetElementsByTagName head 0 HtmlElement scrip
  • 如何使用 jQuery UI Sortable 正确相交?

    这是我对 jQuery UI Sortable 进行动画处理的尝试 https codepen io anon pen YdMOXE https codepen io anon pen YdMOXE var startIndex chang
  • 将 ESLint 与 Airbnb 样式和选项卡结合使用 (React.js)

    我正在开发一个 React js 应用程序 并且正在尝试检查我的代码 我将 ESLint 与 Airbnb 风格一起使用 但出现以下错误 src Test jsx 4 2 error Unexpected tab character no
  • 动态地将 .on() 方法与事件映射绑定

    我使用此语法来确保事件绑定动态添加li元素 ul list on click li function do something 我尝试使用这样的事件映射来存档相同的内容 ul list hammer css hacks false on s
  • 测量填写部分的时间 - 谷歌表单

    我正在尝试使用谷歌表单进行研究调查问卷 对于某些部分 我想自动测量用户填写所需的时间 谷歌表单中没有这样的选项 我尝试复制表单源 并用 javascript 填充时间 但它不起作用 跨源问题 未能成功托管复制的表单 如何做到 我如何衡量回答
  • javascript onclick 进入新窗口

    这是我的代码
  • 替换打字稿中字符串中字符的所有实例?

    我正在尝试用 x 字符替换电子邮件中的所有句号 例如 电子邮件受保护 cdn cgi l email protection 将变为 myxemail emailxcom 电子邮件设置为字符串 我的问题是它不只是替换句号 而是替换每个字符 所
  • 在部分渲染时执行 JavaScript

    我有一些 JavaScript 代码 我想在用户单击其文件夹之一后执行 它会触发 show 操作和 show js erb 从而呈 现部分内容 Show js erb 当用户单击其文件夹之一时触发 如下所示 body append 它成功注
  • 如何在 JavaScript 中从代理对构造 UTF-16 字符?

    以下计算 Unicode 代码点的 UTF 16 代理对 戴着医用口罩的脸 https emojipedia org face with medical mask 但是如何从代理对构造字符以在字符串中使用呢 const codepoint
  • 如何用时刻找到与给定时间最接近的时间?

    所以我有一个简单的代码 一个工作代码 它使用 moment 获取最接近给定时间的时间 Current time in millis const now moment 10 16 HH mm format x List of times co
  • 将 javascript 变量作为参数传递给 @url.Action()

    是否可以将javascript变量作为参数传递给 url Action 因为据我所知可能存在服务器和客户端问题 我的要求是我必须根据过滤器下载文件 并进行ajax调用不适用于下载文件 所以我对 url Action 进行了编码 但无法实现这
  • 将日期参数传递给对 MVC 操作的 ajax 调用的安全方法

    我有一个 MVC 操作 它的参数之一是DateTime如果我通过 17 07 2012 它会抛出一个异常 指出参数为空但不能有空值 但如果我通过01 07 2012它被解析为Jan 07 2012 我将日期传递给 ajax 调用DD MM
  • 将一维数组转换为二维数组[重复]

    这个问题在这里已经有答案了 我正在开发一个程序 我必须将文本文件中的值读入一维数组 我已经成功获取该一维数组中的数字 m1 1 2 3 4 5 6 7 8 9 但我希望数组是 m1 1 2 3 4 5 6 7 8 9 您可以使用此代码 co
  • 开玩笑 setTimeout 不暂停测试

    it has working hooks async gt setTimeout gt console log Why don t I run expect true toBe true 15000 我已经查看了这个答案 Jest 文档和几

随机推荐

  • Python - telnet - 自动化APC PDU

    我正在尝试使用 python 内置的 telnet 功能自动关闭与 APC PDU 连接的设备 我相信我可以输入用户名和密码 但之后无法继续 我的代码如下 telnet session telnetlib Telnet host self
  • 在 Drools 右侧创建新的 Scala 对象

    由于我在 Drools 中使用 Scala 不可变对象 为了更新事实 我需要创建一个新对象来替换它 我为要调用的规则编写了一个 Scala 方法 它返回这样一个对象 我的问题是 在 Drools 规则的 then 部分定义新的 Scala
  • 使用 C# 从另一个应用程序的 SysListView32 中的数据网格读取单元格项目

    我正在尝试使用 C net ui automation 和 winapi 读取另一个进程的 SysListView32 中的数据网格项 使用 ui automation 的 C 代码 http pastebin com 6x7rXMiW 使
  • StatsModels 的置信度和预测区间

    我这样做linear regression with StatsModels import numpy as np import statsmodels api as sm from statsmodels sandbox regressi
  • 添加验证以查看单选按钮是否未被选中

    我有以下代码 li 1 question 1 li li li
  • 参数类型“SomeType?”无法分配给参数类型“SomeType”

    尝试调用函数时出现错误 参数类型 SomeType 无法分配给参数类型 SomeType 我该如何解决 该错误表明您正在尝试传递具有可为空类型的变量 SomeType 作为函数的参数 该函数需要non 可为空的参数 SomeType 您必须
  • 使用 C# 将大尾数法的浮点值转换为小尾数法

    是否可以将浮点数从大端转换为小端 我有一个来自大端平台的值 我通过该平台发送UDP到 Windows 进程 小端 这个值是一个浮点数 但是当我尝试 BitConverter ToSingle 时 我总是得到 5 832204E 42 但它应
  • Amazon SNS:如何获取用于确认订阅的令牌

    以下创建一个等待确认的订阅 aws client subscribe TopicArn topic arn Protocol protocol Endpoint endpoint 这个的回应是这样的 ResponseMetadata HTT
  • 以美元结尾的字符串

    在我的汇编语言课上 我们的第一个作业是编写一个程序 在 DOS 中打印出一个简单的以美元结尾的字符串 它看起来像这样 BITS 32 global main section data msg db Hello world 13 10 sec
  • 从函数返回错误的数组值

    我正在制作这个程序 其中我的主函数调用一个函数 该函数在计算后返回一个数组 我已经检查过计算就在本地函数内部 但是 当我将该数组返回到 主 函数时 我只能打印一次正确的值 而其他时候它都会打印错误的值 include
  • 欧拉问题#4

    使用Python 我试图解决问题 4 of the 欧拉计划问题 有人可以告诉我我做错了什么吗 问题是找到由两个 3 位数乘积组成的最大回文数 这是我到目前为止所拥有的 import math def main for z in range
  • ios nsrange 字符从末尾开始

    假设我有 this is an example with some dashes NSRange将使用 rangeOfString 获取 的第一个实例 但是如果我只想要最后一个怎么办 我正在寻找类似的东西lastIndexOf in JS
  • 使用C#在多页上打印大图像

    我正在尝试编写一些代码来在多个页面上打印大图像 1200 宽度 x 475 高度 我尝试将图像划分为三个矩形 将宽度除以三 并调用 e Graphics DrawImage 三次 但这不起作用 如果我在一页内指定大图像 它可以工作 但是我如
  • 删除列名称中的字符

    例如我有以下数据 Ind var1 1 var2 2 var3 1 var4 2 var100 1 1 0 0 2 1 0 2 2 0 1 0 2 我想重命名后面没有两个字符的列 如下所示 Ind var1 var2 var3 var4 v
  • 如何在 PHP 中使用 gettext?

    我有一个文件dk po and dk mo在我的 webdir 的文件夹 lang 中 我该如何使用这个文件 我已经尝试了所有 但我无法让它工作 Lang putenv LC ALL dk setlocale LC ALL dk Speci
  • 针对不同设备应用分辨率

    我一直在尝试为一系列设备设置屏幕分辨率 我已经查找了所有答案 根据我的理解 如果我创建 res layout normal res layout large 等 我可以在那里放置调整后的布局应用程序将自动加载它们 怎么还没有出现这样的情况
  • LINQ 连接查询(表之间具有可为空的引用)

    我有3张桌子 例如Client Company and Address 客户已收到公司的参考 公司有 2 个可空的地址引用 账单和运输 因此在某些情况下地址可能不存在 我需要进行联接查询 但万一Company BillingAddress
  • Android 11:启动另一个应用程序的服务

    第一个应用程序有一个服务
  • 使用 GSON 序列化对象

    如何使用 gson 将此对象序列化和反序列化为 json public class test Expose public List lt Pair
  • URL 连接字符串的正则表达式

    是否有已知的 JavaScript 正则表达式可以匹配整个 URL 连接字符串 protocol user password hostname 12345 segment1 segment2 p1 val1 p2 val2 我正在寻找一个正