0

这是我将使用的 url 结构示例(忽略电子视频的时代 :))

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

基本上,我希望能够获取视频 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;
}

如果你能帮我填空,那将是最神奇的。我一直盯着正则表达式文档有一段时间了,而且越来越困惑。

4

5 回答 5

0

检索 id

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

检索 URL 参数(开始和结束)的最佳方法是使用 Dojo 执行类似 Get Querystring然后您可以使用以下内容来检索开始和结束

var qs = getUrlParams();
console.log("start is " + qs.start + " and end is " + qs.end )
于 2012-07-19T22:55:03.960 回答
0

1

/http:\/\/www\.youtube\.com\/embed\/([^?]+)/

2

/http:\/\/www\.youtube\.com\/embed\/[^?]+.*[?&]start=(\d+)(?:&|$)/

3

/http:\/\/www\.youtube\.com\/embed\/[^?]+.*[?&]end=(\d+)(?:&|$)/
于 2012-07-19T22:57:45.270 回答
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));
于 2012-07-19T22:58:00.247 回答
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 正则表达式转义序列JavaScript 正则表达式方法

于 2012-07-19T23:06:35.080 回答
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));
于 2012-07-19T23:20:09.560 回答