0

「document.referrer.pathname」に相当するものを探しています。SOでこれに似た質問が他にもあることは知っていますが、すべてのユースケースを処理するものはありません。例えば:

http://example.com/RESULT

http://example.com/RESULT/

http://example.com/RESULT?query=string

すべての例は次を返す必要があります。

RESULT

また

https://example.com/EXTENDED/RESULT/

EXTENDED/RESULT

末尾のスラッシュを含めたいと思う人もいるかもしれませんが、私はリファラーのリストと照合しているので入れません。

私は始めました:

document.referrer.match(/:\/\/.*\/(.*)/)[1]

クエリ文字列の解析を追加するのに苦労しています。

ありがとう!

4

3 に答える 3

3

文字列として URL がある場合は、空のアンカーを作成し、URL を href として指定してパス名にアクセスできます。

var url = 'http://example.com/RESULT?query=string', // or document.referrer
    a = document.createElement('a');
a.href = url;
var result = a.pathname.replace(/(^\/|\/$)/g,'');

ここにテスト例を用意しました: http://jsfiddle.net/eWydy/

于 2012-11-21T00:51:47.610 に答える
1

この正規表現を試してください:

.match(/\/\/.*?\/(.*?)\/?(\?.*)?$/)[1]

デモ

于 2012-11-21T01:46:09.873 に答える
0

新しい要素を作成したくない、または に依存したくない場合は、 anda.pathnameを使用することをお勧めします。indexOfslice

function getPath(s) {
    var i = s.indexOf('://') + 3, j;
    i = s.indexOf('/',i) + 1;  // find first / (ie. after .com) and start at the next char
    if( i === 0 ) return '';
    j = s.indexOf('?',i); // find first ? after first / (as before doesn't matter anyway)
    if( j == -1 ) j = s.length; // if no ?, use until end of string
    while( s[j-1] === '/' ) j = j - 1; // get rid of ending /s
    return s.slice(i, j); // return what we've ended up at
}
getPath(document.referrer);

ただし、正規表現が必要な場合は、おそらくこれ

document.referrer.match(/:\/\/[^\/]+[\/]+([^\?]*)[\/]*(?:\?.*)?$/)[1]

これは、「最初の を見つけ、://next まで続けてから、 aまたは最後または文字列の最後まで/ではないすべてを取得してキャプチャする」ことを行います。これは基本的に、上記で行った機能と同じです。??/

于 2012-11-21T00:58:11.027 に答える