2012-07-19 59 views
0

這裏的ID以及開始和結束時間是我將與(忽略電視頻的年齡:))的Javascript正則表達式:需要檢索嵌入網址

http://www.youtube.com/embed/ABCumLrphFA?&start=20&end=50

合作URL結構的例子

基本上我希望能夠抓住視頻ID,選擇的開始時間(20)和結束選擇時間(50),並將它們保存爲來自任何遵循上述模式的URL的變量。

因此,一個簡單的設置是這樣的:

var url = 'http://www.youtube.com/embed/ABCumLrphFA?&start=20&end=50' 

// get youtube id 
function youtubeid(url) { 
    var ytid = url.match(dont know); 
    ytid = ytid[1]; 
    return ytid; 
} 
// get youtube start time 
function youtubeStart(url) { 
    var ytStart = url.match(dont know); 
    ytStart=ytStart[1]; 
    return ytStart; 
} 
// get youtube end time 
function youtubeEnd(url) { 
    var ytEnd = url.match(dont know); 
    ytEnd=ytEnd[1]; 
    return ytEnd; 
} 

如果你能幫助我填補空白,這將是最驚人的。我一直在盯着正則表達式文檔一段時間,只是越來越困惑。

回答

0

這其他堆棧溢出回答可以幫助你。我用下面的Peter Mortensen的答案。

爲了獲得實際的YouTube ID,您可以使用此正則表達式:

http:\/\/www.youtube.com\/embed\/(.{11}) 

該正則表達式將括號中的返回值。你可以在這裏進行測試:

示例代碼:

var url = 'http://www.youtube.com/embed/ABCumLrphFA?&start=20&end=50' 

// get youtube id 
function youtubeid(url) { 
    var ytid = url.match(/http:\/\/www.youtube.com\/embed\/(.{11})/); 
    ytid = ytid[1]; 
    return ytid; 
} 
alert(youtubeid(url)); 

function getParameterByName(name, url) { 
    var match = RegExp('[?&]' + name + '=([^&]*)') 
        .exec(url); 
    return match && decodeURIComponent(match[1].replace(/\+/g, ' ')); 
} 

alert(getParameterByName('start', url)); 
alert(getParameterByName('end', url)); 
+0

你確定id始終是11個字符嗎? – 2012-07-19 23:02:57

+0

超級資訊。非常感謝! – 2012-07-20 00:55:49

0

要檢索的ID

url.match(/embed\/(.*)\?/) 

檢索網址參數(開始和結束)就是這樣做Get Querystring with Dojo然後,你可以使用下面的檢索起點和終點的最好方法

var qs = getUrlParams(); 
console.log("start is " + qs.start + " and end is " + qs.end) 
0
/http:\/\/www\.youtube\.com\/embed\/([^?]+)/ 
/http:\/\/www\.youtube\.com\/embed\/[^?]+.*[?&]start=(\d+)(?:&|$)/ 
/http:\/\/www\.youtube\.com\/embed\/[^?]+.*[?&]end=(\d+)(?:&|$)/ 
+0

的點和完美。謝謝! – 2012-07-20 00:54:38

0

如果你知道你的URL看起來幾乎完全像你給了一個這樣只會工作(沒有額外的查詢參數;始終以此順序開始和結束;沒有HTTPS;等等)。但是,你可以一次把他們都弄到:

js> str = 'http://www.youtube.com/embed/ABCumLrphFA?&start=20&end=50'  
    http://www.youtube.com/embed/ABCumLrphFA?&start=20&end=50 
js> rxp = /http:\/\/www.youtube.com\/embed\/(.*)\?&start=(\d+)?&end=(\d+)?/ 
    /http:\/\/www.youtube.com\/embed\/(.*)\?&start=(\d+)?&end=(\d+)?/ 
js> result = rxp.exec(str) 
    http://www.youtube.com/embed/ABCumLrphFA?&start=20&end=50,ABCumLrphFA,20,50 
js> result[0] 
    http://www.youtube.com/embed/ABCumLrphFA?&start=20&end=50 
js> result[1] 
    ABCumLrphFA 
js> result[2] 
    20 
js> result[3] 
    50 

我相信這是可以寫一個正則表達式可以用我上面提到的所有怪癖應付,但它的方式難看,並使得它更難理解。無論如何 - 希望這有助於!

參見:JavaScript Regex Escape SequencesJavaScript Regex Methods

0
var url = "http://www.youtube.com/embed/ABCumLrphFA?&start=20&end=50"; 

// get youtube id 
function youtubeid(url) { 
    q = url.substring(url.lastIndexOf("/")+1); 
    var ytid = q.substring(q.lastIndexOf("?"), -1); 
    return ytid; 
} 

// get youtube start time 
function youtubeStart(url) { 
    q = url.substring(url.lastIndexOf("/")+1); 
var ytStart = q.substring(q.indexOf("&start")+7,q.indexOf("&end")); 
    return ytStart; 
} 

// get youtube end time 
function youtubeEnd(url) { 
q = url.substring(url.lastIndexOf("/")+1); 
var ytEnd = q.substring(q.indexOf("&end")+5); 
    return ytEnd; 
} 

console.log(youtubeid(url)); 
console.log(youtubeStart(url)); 
console.log(youtubeEnd(url)); 
+0

OP要求提供Regexp解決方案,如果您要提出其他建議,請不要暗示這樣的東西太脆弱。 – 2012-07-19 23:45:48

+0

我認爲你在這裏失去了重點,並且變得有點粗魯,我可能會補充一點。如果OP真正想要做的是「基本上抓住視頻ID,開始和結束時間」,從「遵循上述模式的任何URL」,那麼我不明白爲什麼繞過正則表達式複雜性的快速建議不值得一提。打破上面的代碼的URL的一個例子對我和我們其他人來說都是非常有啓發性的,並且比你最後的評論少一點苦。重要的是,人們共同分享知識,並以協作而非對抗的精神提出解決方案。 – KostasX 2012-07-20 00:49:34

+0

我很欣賞替代方案。謝謝! – 2012-07-20 00:57:00