从URL正则表达式URL路径(Regex URL Path from URL)

2019-06-27 04:24发布

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

我试图让这个URL路径videoplay

http://video.google.co.uk:80/videoplay?docid=-7246927612831078230&hl=en#hello

如果我用这个正则表达式/.+它匹配/video也是如此。

我需要某种形式的反/负匹配的为不包括//

Answer 1:

在情况下,如果你需要这个你的JavaScript web应用程序:我对这个话题迄今发现的最好的答案是在这里 。 该代码的基本(也是原)版本是这样的:

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"

谢谢约翰龙,你一天做!



Answer 2:

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



Answer 3:

这种表达后得到的一切videoplay ,又名URL路径。

/\/(videoplay.+)/

这表达得港后的一切。 还包括路径。

/\:\d./(.+)/

但是如果使用Node.js ,我建议本地url模块。

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

这确实所有的正则表达式的工作适合你。

{
  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' 
}


Answer 4:

你可以试试这个:

^(?:[^/]*(?:/(?:/[^/]*/?)?)?([^?]+)(?:\??.+)?)$

上述([^] +)是返回路径中捕获组。

请注意,这不是一个全URL正则表达式。 它只是解决您的“//”之后的第一个“/”发生与下列之间的匹配所有的文字问题“?” 字符。

如果你需要一个全匹配的正则表达式,你可以检查这个StackOverflow的链接 ,他们已经讨论和分析的URI的所有可能成其组成部分,包括你的“路径”。
如果您认为矫枉过正,如果你知道你输入的网址将始终遵循具有第一之间的路径“/”和下面的“?”的模式,那么上述正则表达式应该是足够的。



Answer 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') ); 



Answer 6:

你的意思是负回顾后? (?<!/)



Answer 7:

它不是一个正则表达式的解决方案,但大多数语言都有一个URL库,将解析任何URL成其组成部分。 这可能是你在做什么更好的解决方案。



Answer 8:

我觉得这是你以后在做什么: [^/]+$

演示: http://regex101.com/r/rG8gB9



文章来源: Regex URL Path from URL