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

时间:2012-08-19 01:04:18

标签: javascript regex node.js url

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

我正在尝试在此网址videoplay中获取路径。

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

如果我使用此正则表达式/.+,它也会匹配/video

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

9 个答案:

答案 0 :(得分:25)

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

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"

谢谢John Long,你是白天做的!

答案 1 :(得分:7)

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

答案 2 :(得分:2)

你可以试试这个:

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

([^?] +)是返回路径的捕获​​组。

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

如果您需要一个全匹配的正则表达式,您可以查看他们讨论过的StackOverflow link,并将URI的所有可能性分解为其组成部分,包括您的“路径”。
如果您认为这是一种矫枉过正的问题并且如果您知道您的输入网址将始终遵循在第一个“/”和后面的“?”之间路径的模式,则上述正则表达式就足够了。

答案 3 :(得分:2)



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




答案 4 :(得分:1)

你的意思是负面的背后? (?<!/)

答案 5 :(得分:1)

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

答案 6 :(得分:0)

我认为这就是你所追求的:[^/]+$

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

答案 7 :(得分:0)

var subject =
'<link rel="shortcut icon" href="https://cdn.sstatic.net/Sites/stackoverflow/img/favicon.ico?v=ec617d715196"><link rel="apple-touch-icon" href="https://cdn.sstatic.net/Sites/stackoverflow/img/apple-touch-icon.png?v=c78bd457575a"><link rel="image_src" href="https://cdn.sstatic.net/Sites/stackoverflow/img/apple-touch-icon.png?v=c78bd457575a">';
var re=/\"[a-z]+:\/\/[^ ]+"/m;
document.write(subject.match(re));

您可以尝试

/\"[a-z]+:\/\/[^ ]+/

用法

if (/\"[a-z]+:\/\/[^ ]+/m.test(subject)) {  // Successful match } else {    // Match attempt failed }

答案 8 :(得分:0)

对于新的 Google 员工, 在任何环境中使用 JavaScript web api URL:

new URL('your url string').pathname

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