2011-07-04 9 views
1

私はユーチューブのリンクからIDを取得したい、YouTubeのためのブックマークレットを作成しています、JavaScript:すべてを取り除き、IDを取得するには?

例:http://www.youtube.com/watch?v=YgFyi74DVjc

私は上記のリンクからのみ「YgFyi74DVjc」をしたい、それが何の単なる一例です私が欲しい、それは別のものが で、すべてのものを取り除くと、ちょうどその端部を残すために持っている私も、このURLからIDを取得したい http://www.youtube.com/verify_age?next_url=http%3A/ /www.youtube.com/watch%3Fv%3D[YOUTUBEID]

基本的にビデオをクリックしてこのブックマークレットをクリックすると、YouTubeの動画IDとrが取得されますビデオをアンロックしたり、ユーザーのブラウザのフルサイズにビデオを拡大したリンクにそれらをedirects、私はすべてがコード化され、ちょうどリンクの両方からIDを取得する方法を必要としている、私は第二リンク

のために働く、これをコード化しています
var url = "http://www.youtube.com/verify_age?next_url=http%3A//www.youtube.com/watch%3Fv%3D[YOUTUBEID]"; 
    var ytcode = url.substr(80,50); 
    alert(ytcode); 

は、今私はリンクの両方からIDを取得するために何らかの方法たい、助けてください!

+1

「正規表現」を調べるとよいでしょう。 – Jan

答えて

4

(ちょうどそれをURLとパラメータの名前を渡す)この機能を使用することができます。

分解、
url.match(/(\?|&)v=([^&]+)/).pop() 

、意味:

url.match(
    // look for "v=", preceded by either a "?" or a "&", 
    // and get the rest of the string until you hit the 
    // end or an "&" 
    /(\?|&)v=([^&]+)/ 
) 
// that gives you an array like ["?v=YgFyi74DVjc", "?", "YgFyi74DVjc"]; 
// take the last element 
.pop() 

あなたが最初にそれをデコードする場合は、同様に第二の形式のためにこれを使用することができます。

url = decodeURIComponent(url); 

url変数が"http://www.youtube.com/verify_age?next_url=http://www.youtube.com/watch?v=[YOUTUBEID]"になり、正規表現が機能するはずです。

あなたは、再利用可能な関数の中で一緒にすべてを置くことができます:

function getYouTubeID(url) { 
    return decodeURIComponent(url) 
     .match(/(\?|&)v=([^&]+)/) 
     .pop(); 
} 
+0

@Jan - ここでの最後の関数は、両方のために動作します。 – nrabinowitz

+0

うわー、これは多くの人:) –

+0

@nrabinowitzおかげで、私が望んでいたとして完璧に動作します:確かに、それは私が私のコメントを削除し、+あなたの答えを1dを理由です。よくやった。 – Jan

0

ID(すなわちvパラメータ)を仮定すると、URLの最後のパラメータは、常に次のとおりです。

url = url.replace("%3D", "="); 
var splitUrl = url.split("="); 
var yId = splitUrl[splitUrl.length - 1]; 

replace機能は、それが何を表しているかである、=で文字コード%3Dを置き換えるために使用されます。その後、=文字で文字列を分割することができ、そして、あなたのIDは、結果の配列の最後の要素になります。

0

あなたはこれが正規表現のための仕事です

function getParameterByName(name, url) 

    { 
     name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]"); 
     var regexS = "[\\?&]"+name+"=([^&#]*)"; 
     var regex = new RegExp(regexS); 
     var results = regex.exec(url); 
     if(results == null) 
     return ""; 
     else 
     return decodeURIComponent(results[1].replace(/\+/g, " ")); 
    } 
    var url = "http://www.youtube.com/watch?v=YgFyi74DVjc" 
    var v= getParameterByName('v', url); 
0

若干の修正をnrabinowitz答えにのようなYouTubeの共有のURLを可能にする:

私はそれを添付している。また

http://youtu.be/3Ah8EwyeUho

それを簡単に再利用することができます。

$(function(){ 
    $('.js-youtube').on('blur', function(){ 
     var newval = ''; 
     if (newval = $(this).val().match(/(\?|&)v=([^&#]+)/)) { 
      $(this).val(newval.pop()); 
     } else if (newval = $(this).val().match(/(youtu\.be\/)+([^\/]+)/)) { 
      $(this).val(newval.pop()); 
     } 
    }); 
}); 
関連する問題