社区首页 >问答首页 >如何解析URL?

如何解析URL?
EN

Stack Overflow用户
提问于 2011-05-29 14:21:00
回答 6查看 30.6K关注 0票数 27

如果有一件事我就是想不通,那就是正则表达式。

因此,经过大量的搜索,我终于找到了这个适合我的需求:

代码语言:javascript
代码运行次数:0
复制
function get_domain_name()
    { 
    aaaa="http://www.somesite.se/blah/sdgsdgsdgs";
    //aaaa="http://somesite.se/blah/sese";
        domain_name_parts = aaaa.match(/:\/\/(.[^/]+)/)[1].split('.');
        if(domain_name_parts.length >= 3){
            domain_name_parts[0] = '';
        }
        var domain = domain_name_parts.join('.');
        if(domain.indexOf('.') == 0)
            alert("1"+ domain.substr(1));
        else
            alert("2"+ domain);
    }

它基本上给了我回域名,有没有任何我也可以得到域名后的所有东西吗?在本例中,它将是来自aaaa变量的/blah/sdgsdgsdgs

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2011-05-29 14:25:08

请注意,此解决方案不是最好的。我做这个只是为了满足操作员的要求。我个人建议研究一下其他的答案。

执行regexp后的THe将返回域和其余部分。:\/\/(.[^\/]+)(.*)

  1. www.google.com
  2. /goosomething

我建议您在这里学习RegExp文档:http://www.regular-expressions.info/reference.html

使用你的函数:

代码语言:javascript
代码运行次数:0
复制
function get_domain_name()
    { 
    aaaa="http://www.somesite.se/blah/sdgsdgsdgs";
    //aaaa="http://somesite.se/blah/sese";
        var matches = aaaa.match(/:\/\/(?:www\.)?(.[^/]+)(.*)/);
        alert(matches[1]);
        alert(matches[2]);
    }
票数 3
EN

Stack Overflow用户

发布于 2011-05-29 14:46:09

编辑(2020):在现代浏览器中,您可以使用内置的URL Web API。

https://developer.mozilla.org/en-US/docs/Web/API/URL/URL

代码语言:javascript
代码运行次数:0
复制
var url = new URL("http://www.somesite.se/blah/sdgsdgsdgs");
var pathname = url.pathname; // returns /blah/sdgsdgsdgs

您应该使用JavaScript DOM提供的内置URL解析器,而不是依赖可能不可靠的*正则表达式:

代码语言:javascript
代码运行次数:0
复制
var url = document.createElement('a');
url.href = "http://www.example.com/some/path?name=value#anchor";

这就是解析URL所需做的全部工作。其他所有内容都只是访问解析后的值:

代码语言:javascript
代码运行次数:0
复制
url.protocol; //(http:)
url.hostname; //(www.example.com)
url.pathname; //(/some/path)
url.search; // (?name=value)
url.hash; //(#anchor)

在这种情况下,如果要查找/blah/sdgsdgsdgs,可以使用url.pathname进行访问

基本上,您只需在JavaScript中创建一个链接(从技术上讲,是锚元素),然后就可以直接调用解析后的片段。(因为您没有将其添加到DOM中,所以它不会在任何地方添加任何不可见的链接。)访问它的方式与访问location对象上的值的方式相同。

(灵感来自this wonderful answer。)

编辑:一个重要的注意事项: Internet Explorer似乎有一个错误,它省略了对象上pathname属性的前导斜杠,如下所示。您可以通过执行以下操作来将其标准化:

代码语言:javascript
代码运行次数:0
复制
 url.pathname = url.pathname.replace(/(^\/?)/,"/");

注意:*:我说“潜在的不可靠”,因为尝试构建或找到一个包罗万象的URL解析器是很有诱惑力的,但有很多条件、边缘情况和容错的解析技术可能没有被考虑或适当地支持;浏览器可能最擅长实现这个逻辑(因为解析URL对于它们的正确操作至关重要),所以我们应该保持它的简单性,并把它留给浏览器。

票数 83
EN

Stack Overflow用户

发布于 2011-05-29 14:27:08

(参见附录B)提供了一个正则表达式来解析URI部分:

代码语言:javascript
代码运行次数:0
复制
^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?
 12            3  4          5       6  7        8 9

哪里

代码语言:javascript
代码运行次数:0
复制
scheme    = $2
authority = $4
path      = $5
query     = $7
fragment  = $9

示例:

代码语言:javascript
代码运行次数:0
复制
function parse_url(url) {
    var pattern = RegExp("^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?");
    var matches =  url.match(pattern);
    return {
        scheme: matches[2],
        authority: matches[4],
        path: matches[5],
        query: matches[7],
        fragment: matches[9]
    };
}
console.log(parse_url("http://www.somesite.se/blah/sdgsdgsdgs"));

给出

代码语言:javascript
代码运行次数:0
复制
Object
    authority: "www.somesite.se"
    fragment: undefined
    path: "/blah/sdgsdgsdgs"
    query: undefined
    scheme: "http"
票数 35
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6168260

复制
相关文章
网约车风云再起:“小窗口”和“大窗口”齐开
有的原地“满血复活”,如两年前悄悄下架的美团打车App,近日已经重新上架,且同时在上海、北京、南京等34城招募司机。
用户2908108
2021/07/23
1.6K0
根据顶点边数和点信息输出邻接矩阵
// ConsoleApplication23.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。 // #include #include using namespace std; #define MAXVEX 100 typedef char VertexType; typedef int EdgeType; typedef struct { VertexType vexs[MAXVEX]; Edge
川川菜鸟
2021/10/18
4150
模型矩阵、视图矩阵、投影矩阵
模型视图投影矩阵的作用,就是将顶点从局部坐标系转化到规范立方体(Canonical View Volnme)中。总而言之,模型视图投影矩阵=投影矩阵×视图矩阵×模型矩阵,模型矩阵将顶点从局部坐标系转化到世界坐标系中,视图矩阵将顶点从世界坐标系转化到视图坐标系下,而投影矩阵将顶点从视图坐标系转化到规范立方体中。
全栈程序员站长
2022/08/27
2.2K0
【Windows 逆向】OD 调试器工具 ( 显示模块窗口 | 显示记录窗口 | 显示内存窗口 | 显示线程 | 显示句柄 | 显示 CPU | 多窗口界面 )
" 模块窗口 " 内容如下 , 在模块窗口中 , 显示的都是 可执行文件 和 加载的 dll 动态库 ;
韩曙亮
2023/03/29
3.4K0
【Windows 逆向】OD 调试器工具 ( 显示模块窗口 | 显示记录窗口 | 显示内存窗口 | 显示线程 | 显示句柄 | 显示 CPU | 多窗口界面 )
统计各个分类和标签下的文章数
在我们的博客侧边栏有分类列表和标签列表,显示博客已有的全部文章分类。现在想在分类名和标签名后显示该分类或者标签下有多少篇文章,该怎么做呢?最优雅的方式就是使用 django 的 annotate 方法。
HelloGitHub
2021/05/14
7410
opencv窗口的创建/显示/销毁
说明:我们设置一个键盘上的q键,当窗口显示后,我们按下键盘上的q键则可以销毁显示的窗口。
淼学派对
2023/10/14
4300
Flex Air 主窗口和多个子窗口从属显示
项目组的程序需要做一个有主窗口和几个小的子窗口(一些控制板), 需求是:点击主窗口的时候,小的子窗口能保持在主窗口前边。 然后切换到其他软件的窗口的时候,主窗口和子窗口能跟着一起退到后边。 烦啊~~3天时间,已经试了N多方法。 1、重载NativeWindow,加入组件的方式。发现很多控件加不进去~~失败 2、一直处理orderToFrontOf(Main),但子窗口会一直闪烁。失败 3、用alwaysInFront,切换到其他软件的时候,把alwaysInFront设置为false。几乎成功了,但还是很多
用户1258909
2018/07/03
1.3K0
模拟试题A
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wpxu08/article/details/70208378
步行者08
2018/10/09
3.6K0
echarts的双y轴显示
第一步: 引入echarts import echarts from "echarts"; Vue.prototype.$echarts = echarts //引入组件(全局引入) 第二步: id绑定 <div id="pie"> /// pie 用于存放所要绘制的图形 第三步: 配置options,创建echarts实例 option1: { title: { text: "双坐标轴事例", //标题 show: f
用户4344670
2019/08/28
4.9K0
写给 python 程序员的 OpenGL 教程
OpenGL 是 Open Graphics Library 的简写,意为“开放式图形库”,是用于渲染 2D、3D 矢量图形的跨语言、跨平台的应用程序编程接口(API)。OpenGL 不是一个独立的平台,因此,它需要借助于一种编程语言才能被使用。C / C++ / python / java 都可以很好支持 OpengGL,我当然习惯性选择 python 语言。
全栈程序员站长
2022/07/22
3.3K0
写给 python 程序员的 OpenGL 教程
神奇的 SQL 之团结的力量 → JOIN
    闺蜜家暴富,买了一栋大别野,喊我去吃饭,菜挺丰盛的,筷子有些不给力,银筷子,好重,我说换个竹子的,闺蜜说,这种银筷子我家总共才五双,只有贵宾才能用~我咬着牙享受着贵宾待遇,终于,在第三次夹虾排滑落盘子时,我爆发了:去它喵的贵宾,我要虾排……不是……我要竹筷子!
青石路
2019/10/29
5440
神奇的 SQL 之团结的力量 → JOIN
图形渲染管线简介_渲染流水线和渲染管线
graphics rendering pipeline, 也被称为”the pipeline”,即图形渲染管线。
全栈程序员站长
2022/09/21
1.3K0
大学课程 | 计算机图形学,基于MFC和二维变换的画图软件
本文描述了二维复合变换的基本方法和思想,根据鼠标位置坐标获取起始点pStart和终止点pEnd的坐标,设计实现每个基本图形的画图方法,根据pStart和pEnd即可确定基本图形的控制点,进而绘制对应图形。规范化齐次坐标以后,图形几何变换可以表示为图形控制点点集合的规范化齐次坐标矩阵与二维变换矩阵相乘的形式,分别设置二维变换矩阵的参数信息,设计实现对应的方法,即可实现图形的二维变换功能。
Justlovesmile
2021/12/14
2.5K0
大学课程 | 计算机图形学,基于MFC和二维变换的画图软件
万字长文详解如何用Python玩转OpenGL | CSDN 博文精选
【编者按】OpenGL(开放式图形库),用于渲染 2D、3D 矢量图形的跨语言、跨平台的应用程序编程接口,C、C++、Python、Java等语言都能支持 OpenGL。本文作者以 Python 语法为例,用两万字详解 OpenGL 的理论知识、用法与实际操作,干货满满,一起来看看吧。
AI科技大本营
2019/12/02
9.5K0
万字长文详解如何用Python玩转OpenGL | CSDN 博文精选
Shader、Draw Call和渲染管线(Rendering Pipeline)
《Real-Time Rendering, Third Edition》   (PDF的配图链接)将一个渲染流程分为三个阶段:
meteoric
2018/11/20
1.3K0
模拟试题C
2.用编码裁剪法裁剪二维线段时,判断下列直线段采用哪种处理方法。假设直线段两个端点M、N的编码为1000和1001(按TBRL顺序)( )
步行者08
2018/10/09
2.1K0
WPF 获取全局所有窗口的创建显示事件 监控窗口打开
本文将告诉大家如何在 WPF 里面进行全局监控任意的窗口创建显示打开,可以获取到每个 WPF 窗口的打开的时机。如此可以用来辅助定位问题和输出日志
林德熙
2023/04/07
2.1K0
局域网SDN硬核技术内幕 19 团结一切可以团结的力量
我们发现,这个组网模型与园区SDN网络标准组网的区别在于,接入利用了旧有的交换机。我们回忆一下,园区SDN网络标准模型对接入交换机的要求——仅需要支持VLAN Access和VLAN Trunk即可。
用户8289326
2022/07/22
3740
局域网SDN硬核技术内幕 19 团结一切可以团结的力量
在窗口显示摄像头的帧
# coding=gbk import cv2 clicked=False def onMouse(event,x,y,flags,param): global clicked if event ==cv2.EVENT_LBUTTONUP: clicked = True cp=cv2.VideoCapture(0)#cp为cameraCapture缩写  # VideoCapture是opencv内置函数,参数为零代表第一个摄像头,一般也就是笔记本内置摄像头  cv2.namedWindow('mywindow') cv2.setMouseCallback('mywidow',onMouse) print ('Showing camera feed. Click window or press any key to stop.')               success, frame = cp.read()//不懂点击
用户2965768
2018/08/30
6700
opengl入门教程pdf[猎豹opengl快速入门]
概述OpenGLOpenGL是渲染2D、3D矢量图形硬件的一种软件接口。本质上说,它是一个3D图形和模型库,具有高度的可移植性,并且具有非常快的渲染速度。OpenGL并不是一种语言,而是更像一个C运行时函数库。它提供了一些预包装的功能,帮助开发人员编写功能强大的三维应用程序。OpenGL可以再多种操作系统平台上运行,例如各种版本的Windows、UNIX/Linux、MacOS和OS/...
Java架构师必看
2022/04/02
3.2K0
opengl入门教程pdf[猎豹opengl快速入门]

相似问题

团结中的双跳需要帮助

10

给定三角形的面法和顶点,如何求顶点的无圈阶?

10

团结5.2 -动画窗口/标签

10

在“团结”中,我如何设置窗口的大小?

20

单位立方体中三角形和顶点的计数

20
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文