来自URL的正则表达式URL路径

Tho*_*ggi 12 javascript regex url node.js

我有一点正则表达式的麻烦.

我想在这个网址中找到路径videoplay.

http://video.google.co.uk:80/videoplay?docid=-7246927612831078230&hl=en#hello
Run Code Online (Sandbox Code Playgroud)

如果我使用这个正则表达式/.+也匹配/video.

我需要某种反/负匹配不包括在内 //

Vla*_*sla 27

如果您的JavaScript网络应用程序需要这个:我在这个主题上找到的最佳答案就在这里.代码的基本(也是原始)版本如下所示:

var parser = document.createElement('a');
parser.href = "http://example.com:3000/pathname/?search=test#hash";

parser.protocol; // => "http:"
parser.hostname; // => "example.com"
parser.port;     // => "3000"
parser.pathname; // => "/pathname/"
parser.search;   // => "?search=test"
parser.hash;     // => "#hash"
parser.host;     // => "example.com:3000"
Run Code Online (Sandbox Code Playgroud)

谢谢John Long,你白天做的!


小智 9

(http[s]?:\/\/)?([^\/\s]+\/)(.*)第3组
演示:http://regex101.com/r/vK4rV7/1

  • 如果存在诸如“www.abc.com?param=xyz”之类的路径,它将无法工作。我像这样稍微修改了它以使其工作(我也对前两组使用了非匹配组)。`(?:https?:\/\/)?(?:[^?\/\s]+[?\/])(.*)` 演示:https://regex101.com/r/eNUBb9 (2认同)

Tho*_*ggi 7

此表达式后面的所有内容videoplay,即url路径.

/\/(videoplay.+)/
Run Code Online (Sandbox Code Playgroud)

此表达式获取端口后的所有内容.也包括路径.

/\:\d./(.+)/
Run Code Online (Sandbox Code Playgroud)

但是,如果使用Node.js我推荐本机url模块.

var url = require('url')
var youtubeUrl = "http://video.google.co.uk:80/videoplay?docid=-7246927612831078230&hl=en#hello"
url.parse(youtubeUrl)
Run Code Online (Sandbox Code Playgroud)

所有正则表达式都适合你.

{
  protocol: 'http:',
  slashes: true,
  auth: null,
  host: 'video.google.co.uk:80',
  port: '80',
  hostname: 'video.google.co.uk',
  hash: '#hello',
  search: '?docid=-7246927612831078230&hl=en',
  query: 'docid=-7246927612831078230&hl=en',
  pathname: '/videoplay',
  path: '/videoplay?docid=-7246927612831078230&hl=en',
  href: 'http://video.google.co.uk:80/videoplay?docid=-7246927612831078230&hl=en#hello' 
}
Run Code Online (Sandbox Code Playgroud)


Vla*_*sla 5

function getPath(url, defaults){
    var reUrlPath = /(?:\w+:)?\/\/[^\/]+([^?#]+)/;
    var urlParts = url.match(reUrlPath) || [url, defaults];
    return urlParts.pop();
}
alert( getPath('http://stackoverflow.com/q/123/regex-url', 'unknown') );
alert( getPath('https://stackoverflow.com/q/123/regex-url', 'unknown') );
alert( getPath('//stackoverflow.com/q/123/regex-url', 'unknown') );
alert( getPath('http://stackoverflow.com/q/123/regex-url?foo', 'unknown') );
alert( getPath('http://stackoverflow.com/q/123/regex-url#foo', 'unknown') );
alert( getPath('http://stackoverflow.com/q/123/regex-url/', 'unknown') );
alert( getPath('http://stackoverflow.com/q/123/regex-url/?foo', 'unknown') );
alert( getPath('http://stackoverflow.com/q/123/regex-url/#foo', 'unknown') );
alert( getPath('http://stackoverflow.com/', 'unknown') );
Run Code Online (Sandbox Code Playgroud)