2012-04-24 19 views
1

私は、フォーム内のURLがあります:serverNameは、サーバーのドメイン名であるJavascriptでURLの末尾を抽出するには?

serverNameの/アプリ/画像/サムネイル/ 2012/4/1335228884300分の23/bb65efd50ade4b3591dcf7f4c693042b

を。

これらのURLの1つを受け入れ、最後の(最も右側の)スラッシュで区切られた文字列を返すJS関数を記述したいと思います。したがって、上記のURLが関数に渡された場合、 "bb65efd50ade4b3591dcf7f4c693042b";が返されます。

function getImageDirectoryByFullURL(url) { 
    // ... Not sure how to define regexp to delimit on forward slashes, 
    // or how to start searching from end of string. 
} 

答えて

6

split by slashes /, pop off the last and return it

function getImageDirectoryByFullURL(url){ 
    return url.split('/').pop() 
} 

//a step by step breakdown 
function getImageDirectoryByFullURL(url){ 
    url = url.split('/'); //url = ["serverName","app",...,"bb65efd50ade4b3591dcf7f4c693042b"] 
    url = url.pop();  //url = "bb65efd50ade4b3591dcf7f4c693042b" 
    return url;   //return "bb65efd50ade4b3591dcf7f4c693042b" 
} 

何これが行うこと/ごとにURLを分割し、間に値の配列を返しますが、スラッシュ、含めていません。 split()によって返されるものは配列なので、pop()を使用して最後のアイテムをポップアウトして返します。

+0

彼は彼が望んでいるとは思っていませんが、OPの望んでいることの良い例:P – Interrobang

+0

返された配列の最後のインデックスをどのようにポップするのですか? – IAmYourFaja

+0

@AdamTannon 'split()'は 'pop()'が使用できる配列を返します。 'pop()'は 'split()'によって与えられた配列の最後の項目を返します。したがって、関数全体から返されるものです。 – Joseph

4

この場合、substr()split()より速くなる可能性があります。 100%ではありません。

function getImageDirectoryByFullURL(url){ 
    return url.substr(url.lastIndexOf("/")+1); 
} 

編集:私は忘れてしまった、あなたは余分な長さのパラメータを含める必要はありません。それを渡すことなく、文字列の最後にsubstrという文字列が得られます。このソリューションはJosephの答えよりも少し醜いですが、Chromeでは2倍速く、Firefoxでは5倍の速さです。

+1

私は速度の違いが問題になるほど大きいとは思わない。あなたの解決策とヨセフが提案した解決策はどちらも有効です(私は個人的には自分が好きですが、それは短くて簡潔です)。 –

+1

ちょうど私がそれをする別の方法を提案していると思った。 =] –

+0

+1、偉大な選択肢、ここに+1を追加すると 'lastIndexOf("/")+ 1'が最初の'/' – ajax333221

0

また、同じような結果を得ることができます。

function getImageUrl(url){ 
    var result = url.substring(url.lastIndexOf("/") + 1); 
    return result; 
} 
+0

私の答えを見てください。また、Javascript関数は大文字と小文字を区別します( 'LastIndexOf'は' lastIndexOf'でなければなりません)、 'lastIndexOf("/")+ 1'は、文字列。 –

+0

あなたは正しい@Elliot Bonnevilleです。 –

2

それは少しより堅牢にし、最後のスラッシュ、ハッシュタグやURLのクエリパラメータの存在の可能性を可能にするには、次の

function getImageDirectoryByFullURL(url){ 
    url = url.replace(/#[^#]+$/, "").replace(/\?[^\?]+$/, "").replace(/\/$/, ""); 
    return url.substr(url.lastIndexOf("/") + 1); 
} 

とテストの束と働いデモ例:何の賢明な正規表現のバージョンが存在しないので、考えるhttp://jsfiddle.net/jfriend00/akVVf/

+1

+1ばかげたRegEx。 –

+0

@ ElliotBonneville +1、ばかげた+1。 ;-) – RobG

+0

なぜ正規表現がばかげていると思いますか分かりません。 '/#[^#] + $ /'は最後の '# 'から文字列の終わりまでをマッチさせます。 '/ \?[^ \?] + $ /'と '?'で同じです。 – jfriend00

1

return url.replace(/^.*\//,''); 
+0

URLの末尾にスラッシュがないことをお勧めします。 – jfriend00

+0

OPはそれをソートすることができます。要件は "最後の(最右端の)スラッシュで区切られた文字列"でした。 – RobG

関連する問題