如何在javascript中解析Dailymotion视频网址

时间:2012-09-12 11:42:38

标签: javascript jquery regex string-parsing

我想解析Dailymotion视频网址以获取javascript中的视频ID,如下所示:

http://www.dailymotion.com/video/x44lvd

视频ID:“x44lvd”

我认为我需要正则表达式字符串来获取所有dailymotion视频网址组合的视频ID。

我发现了YouTube链接的url解析器正则表达式,它的工作原理如下:

var regExp = /^.*((youtu.be\/)|(v\/)|(\/u\/\w\/)|(embed\/)|(watch\?))\??v?=?([^#\&\?]*).*/;
    var match = url.match(regExp);
    var videoID = "";
    if (match && match[7].length == 11){
        videoID = match[7];
    }else
       alert('video not found');

任何人都可以给我一些关于dailymotion的建议吗?

5 个答案:

答案 0 :(得分:13)

function getDailyMotionId(url) {
    var m = url.match(/^.+dailymotion.com\/(video|hub)\/([^_]+)[^#]*(#video=([^_&]+))?/);
    if (m !== null) {
        if(m[4] !== undefined) {
            return m[4];
        }
        return m[2];
    }
    return null;
}

console.log(getDailyMotionId("http://www.dailymotion.com/video/x44lvd_rates-of-exchange-like-a-renegade_music"));
console.log(getDailyMotionId("http://www.dailymotion.com/video/x44lvd"));
console.log(getDailyMotionId("http://www.dailymotion.com/hub/x9q_Galatasaray"));
console.log(getDailyMotionId("http://www.dailymotion.com/hub/x9q_Galatasaray#video=xjw21s"));
console.log(getDailyMotionId("http://www.dailymotion.com/video/xn1bi0_hakan-yukur-klip_sport"));

在此期间我学会了一些正则表达式。

这是一个更新版本,它返回在文本中找到的任何dailymotion id的数组:

function getDailyMotionIds(str) {
    var ret = [];
    var re = /(?:dailymotion\.com(?:\/video|\/hub)|dai\.ly)\/([0-9a-z]+)(?:[\-_0-9a-zA-Z]+#video=([a-z0-9]+))?/g;     
    var m;

    while ((m = re.exec(str)) != null) {
        if (m.index === re.lastIndex) {
            re.lastIndex++;
        }
        ret.push(m[2]?m[2]:m[1]);
    }
    return ret;
}

在文本框中输入http://jsfiddle.net/18upkjaa/embedded/result/进行测试

答案 1 :(得分:3)

这是一个稍微更新来处理非/ video /或/ hub / path,就像最后一个:

function getDailyMotionId(url) {
    var m = url.match(/^.+dailymotion.com\/((video|hub)\/([^_]+))?[^#]*(#video=([^_&]+))?/);
    return m ? m[5] || m[3] : null;
}

console.log(getDailyMotionId("http://www.dailymotion.com/video/x44lvd_rates-of-exchange-like-a-renegade_music"));
console.log(getDailyMotionId("http://www.dailymotion.com/video/x44lvd"));
console.log(getDailyMotionId("http://www.dailymotion.com/hub/x9q_Galatasaray"));
console.log(getDailyMotionId("http://www.dailymotion.com/hub/x9q_Galatasaray#video=xjw21s"));
console.log(getDailyMotionId("http://www.dailymotion.com/video/xn1bi0_hakan-yukur-klip_sport"));

// non /video/ or /hub/ url:
console.log(getDailyMotionId("http://www.dailymotion.com/fr/relevance/search/gangnam+style/1#video=xsbwie"));

答案 2 :(得分:0)

其他答案与所有​​dailymotion网址不匹配

(如http://dai.ly/x2no31b

使用此正则表达式:

^(?:(?:http|https):\/\/)?(?:www.)?(dailymotion\.com|dai\.ly)\/((video\/([^_]+))|(hub\/([^_]+)|([^\/_]+)))$

答案 3 :(得分:0)

我使用这个(包括像dai.ly/{videoId}这样的短网址):

^(?:(?:https?):)?(?:\/\/)?(?:www\.)?(?:(?:dailymotion\.com(?:\/embed)?\/video)|dai\.ly)\/([a-zA-Z0-9]+)(?:_[\w_-]+)?$

Debuggex Demo

答案 4 :(得分:0)

仅捕获视频 ID 的修复

^.*(?:dailymotion.com\/(?:video|hub)|dai.ly)\/([^_]+)[^#]*(#video=([^_&]+))?