20

正規表現に少し問題があります。

このURLでパスを取得しようとしていますvideoplay

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

この正規表現を使用すると、同様/.+に一致/videoします。

含めないために、ある種のアンチ/ネガティブマッチが必要になります//

4

12 に答える 12

37

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"

ジョン・ロングありがとう、あなたは日ごとに作りました!

于 2015-07-03T05:22:14.977 に答える
13

(http[s]?:\/\/)?([^\/\s]+\/)(.*)グループ3
デモ: http: //regex101.com/r/vK4rV7/1

于 2014-08-19T08:54:01.807 に答える
8

この式は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' 
}
于 2015-08-25T11:06:21.173 に答える
3

あなたはこれを試すことができます:

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

([^?] +)上記は、パスを返すキャプチャグループです。

これはすべてのURLの正規表現ではないことに注意してください。これは、「//」の後にある最初の「/」とそれに続く「?」の間のすべてのテキストを一致させるという問題を解決するだけです。キャラクター。

完全に一致する正規表現が必要な場合は、このStackOverflowリンクを確認して、URIのすべての可能性について説明し、「パス」を含む構成要素に分析することができます。
やり過ぎだと考え、入力URLが常に最初の「/」とそれに続く「?」の間にパスを持つパターンに従うことがわかっている場合は、上記の正規表現で十分です。

于 2012-08-19T03:08:39.827 に答える
3

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

于 2015-06-04T01:56:10.383 に答える
1

あなたはネガティブな後ろ姿を意味しますか?(?<!/)

于 2012-08-19T01:06:04.380 に答える
1

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 }
于 2020-05-05T13:16:56.507 に答える
1

新しいGoogle社員の場合は、任意の環境でJavaScript WebAPIURLを使用します。

new URL('your url string').pathname

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

于 2021-08-11T09:06:31.760 に答える
0

これは正規表現ソリューションではありませんが、ほとんどの言語には、任意のURLを構成要素に解析するURLライブラリがあります。これはあなたがしていることのためのより良い解決策かもしれません。

于 2012-08-19T18:33:52.537 に答える
0

これを試してください:

^http[s]?:\/\/(www\.)?(.*)?\/?(.)*
于 2021-11-10T07:33:50.247 に答える
0

言語機能を使用した回答は適切ですが、REGEXPを使用してURLをコンポーネントに分割するもう1つの方法を次に示します。

^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?
     ||            |  |          |       |   |        | |
     12 - scheme   |  |          |       |   |        | |
                   3  4 - authority, includes hostname/ip and port number.
                                 5 - path|   |        | |
                                         6   7 - query| |
                                                      8 9 - fragment
于 2021-11-10T08:01:19.343 に答える
-1

私はこれがあなたが求めているものだと思います:[^/]+$

デモ: http: //regex101.com/r/rG8gB9

于 2012-08-19T11:29:57.167 に答える