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

时间:2009-01-14 02:51:44

标签: javascript regex

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

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

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

6 个答案:

答案 0 :(得分:28)

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

以下行是用于分解a的正则表达式    格式良好的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 = <undefined>
  $7 = <undefined>
  $8 = #Related
  $9 = Related

其中<undefined>表示组件不存在,原样    上例中查询组件的情况。因此,我们    可以确定五个组件的值

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

答案 1 :(得分:13)

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

因此,要访问某个随机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 $('<a/>').attr('href',url)[0].pathname.replace(/^[^\/]/,'/');
}

答案 2 :(得分:12)

快'n'脏:

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

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

答案 3 :(得分:3)

window.location对象具有路径名,搜索和哈希属性,其中包含您需要的内容。

此页面

location.pathname = '/questions/441755/regular-expression-to-remove-hostname-and-port-from-url'  
location.search = '' //because there is no query string
location.hash = ''

所以你可以使用

var fullpath = location.pathname+location.search+location.hash

答案 4 :(得分:1)

此正则表达似乎有效:http://[ ^ /] )(/。

作为测试,我在文本编辑器中运行此搜索并替换:

 Search: (http://[^/]*)(/.*)
Replace: Part #1: \1\nPart #2: \2  

它将此文本转换为:

http://host:8081/path/to/something

进入这个:

Part #1: http://host:8081
Part #2: /path/to/something

并转换了这个:

http://stackoverflow.com/questions/441755/regular-expression-to-remove-hostname-and-port-from-url

进入这个:

Part #1: http://stackoverflow.com
Part #2: /questions/441755/regular-expression-to-remove-hostname-and-port-from-url

答案 5 :(得分:1)

非常简单:

^\w+:.*?(:)\d*

试图找到&#34;的第二次出现:&#34;后跟数字,后跟http或https。

这适用于以下两种情况

前:

http://localhost:8080/myapplication

https://localhost:8080/myapplication

希望这有帮助。