Javascript正则表达式:需要从嵌入URL检索ID以及开始和结束时间

Javascript正则表达式:需要从嵌入URL检索ID以及开始和结束时间,javascript,regex,url,youtube,Javascript,Regex,Url,Youtube,下面是我将使用的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

下面是我将使用的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;
}
如果你能帮我填空,那将是最令人惊奇的。我盯着regex文档已经有一段时间了,只是越来越困惑。

检索id

url.match(/embed\/(.*)\?/)
检索URL参数(开始和结束)的最佳方法是执行如下操作,您可以使用以下方法检索开始和结束

var qs = getUrlParams();
console.log("start is " + qs.start + " and end is " + qs.end )
一,

二,

三,


另一个堆栈溢出答案可能会帮助您。我在下面使用了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));

只有当您知道您的URL与您提供的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
我相信写一个正则表达式是可能的,它可以处理我上面提到的所有怪癖,但它更难看,更难理解。无论如何-希望这有帮助


另请参见:和

您确定id始终为11个字符长吗?OP要求提供一个Regexp解决方案,如果您要建议其他内容,请不要建议像这样脆弱的内容。我认为您在这里失去了重点,可能会变得有点粗鲁。如果OP真正想做的是从“遵循上述模式的任何URL”中“基本上获取视频id、开始时间和结束时间”,那么我不明白为什么一个绕过正则表达式复杂性的快速建议不值得一提。一个破坏上述代码的URL示例对我和我们其他人都很有启发,而且比你上次的评论少一点痛苦。重点是,,一个以协作而非对抗的精神共享知识和建议解决方案的社区。URL的示例表示相同的内容,但不适用于此代码http://www.youtube.com/embed/ABCumLrphFA?start=20&end=50和
http://www.youtube.com/embed/ABCumLrphFA?end=50&start=20
。对不起,如果我听起来很粗鲁;然而,我的观点仍然是使用
indexOf()
不是一种可靠的方法。类似于我在回答中所建议的内容(不使用Regex作为查询字符串部分)更加健壮。
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));
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
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));