正規表現に少し問題があります。
このvideoplay
のパスを取得しようとしています。
http://video.google.co.uk:80/videoplay?docid=-7246927612831078230&hl=en#hello
この正規表現/.+
を使用すると、/video
にも一致します。
//
を含めないようにするには、何らかの反/否定的な一致が必要です
この式は、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'
}
JavaScript Webアプリにこれが必要な場合:このトピックについて私が見つけた最良の答えは 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"
ジョンロング、日ごとに作成していただきありがとうございます。
(http[s]?:\/\/)?([^\/\s]+\/)(.*)
グループ3
デモ: http://regex101.com/r/vK4rV7/1
あなたはこれを試すことができます:
^(?:[^/]*(?:/(?:/[^/]*/?)?)?([^?]+)(?:\??.+)?)$
([^?] +)は、パスを返すキャプチャグループです
これはすべてURLの正規表現ではないことに注意してください。それは、「//」の後に発生する最初の「/」と次の「?」の間のすべてのテキストを一致させるという問題を解決するだけです。キャラクター。
すべてが一致する正規表現が必要な場合は、これをチェックできます StackOverflow link ここで、URIのすべての可能性について議論し、「パス」を含む構成部分に分解しました。
やり過ぎだと考え、かつ入力URLが常に最初の「/」と次の「?」の間のパスを持つパターンに従うことがわかっている場合は、上記の正規表現で十分です。
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') );
これはあなたが望んでいることだと思います:[^/]+$
これは正規表現ソリューションではありませんが、ほとんどの言語には、URLを構成要素に解析するURLライブラリがあります。これはあなたがやっていることのためのより良い解決策かもしれません。
あなたは後ろ向きの否定的な意味ですか? (?<!/)