当前位置:  开发笔记 > 编程语言 > 正文

正则表达式从URL中删除主机名和端口?

如何解决《正则表达式从URL中删除主机名和端口?》经验,为你挑选了3个好方法。

我需要编写一些javascript来从url中删除hostname:port部分,这意味着我只想提取路径部分.

即我想编写一个函数getPath(url),使getPath(" http:// host:8081/path/to/something ")返回"/ path/to/something"

可以使用正则表达式完成吗?



1> Mike Samuel..:

RFC 3986(http://www.ietf.org/rfc/rfc3986.txt)在附录B中说明

以下行是用于将格式正确的URI引用分解为其组件的正则表达式.

  ^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?
   12            3  4          5       6  7        8 9

上面第二行中的数字只是为了提高可读性; 它们表示每个子表达的参考点(即每个配对括号).我们将子表达式匹配的值称为$.例如,将上面的表达式与之匹配

  http://www.ics.uci.edu/pub/ietf/uri/#Related

导致以下子表达式匹配:

  $1 = http:
  $2 = http
  $3 = //www.ics.uci.edu
  $4 = www.ics.uci.edu
  $5 = /pub/ietf/uri/
  $6 = 
  $7 = 
  $8 = #Related
  $9 = Related

where 表示该组件不存在,如上例中的查询组件的情况.因此,我们可以确定五个组件的值

  scheme    = $2
  authority = $4
  path      = $5
  query     = $7
  fragment  = $9


正则表达式被**和**错误地包围着.

2> James..:

我知道正则表达式很有用,但在这种情况下它们并不是必需的.Location对象是DOM中所有链接的固有对象,并具有pathname属性.

因此,要访问某个随机URL的属性,您可能需要创建一个新的DOM元素,然后返回其路径名.

一个例子,它将始终完美地工作:

function getPath(url) {
    var a = document.createElement('a');
    a.href = url;
    return a.pathname.substr(0,1) === '/' ? a.pathname : '/' + a.pathname;
}

jQuery版本:(如果需要,使用正则表达式添加前导斜杠)

function getPath(url) {
    return $('').attr('href',url)[0].pathname.replace(/^[^\/]/,'/');
}



3> strager..:

快速'n'脏:

^[^#]*?://.*?(/.*)$

主机名和端口(包括初始/)之后的所有内容都在第一组中捕获.


这个正则表达式是错误的.它捕获组1中的路径,查询和片段.
推荐阅读
ifx0448363
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有