通过在javascript/JQuery中解析youtube t=queryparam将小时、分钟转换为秒
我想解析youtube url(“”)中的时间戳t=并计算作为嵌入youtube url的开始参数需要传递的总秒数 为了获得小时、分钟和秒数,我使用了如下reg exp。让我知道可以在代码中进行任何改进以使其变得简单通过在javascript/JQuery中解析youtube t=queryparam将小时、分钟转换为秒,javascript,jquery,Javascript,Jquery,我想解析youtube url(“”)中的时间戳t=并计算作为嵌入youtube url的开始参数需要传递的总秒数 为了获得小时、分钟和秒数,我使用了如下reg exp。让我知道可以在代码中进行任何改进以使其变得简单 var url ="http://youtu.be/XGSy3_Czz8k?t=1h5m16s"; var timeStamp = url.match("t=(.)*?[&|(\s)]"); var hours = timeStamp[0].match(/(\d)+h/);
var url ="http://youtu.be/XGSy3_Czz8k?t=1h5m16s";
var timeStamp = url.match("t=(.)*?[&|(\s)]");
var hours = timeStamp[0].match(/(\d)+h/);
var minutes = timeStamp[0].match(/(\d)+m/);
var seconds = timeStamp[0].match(/(\d)+s/);
var totalTimeInSeconds = 0;
if (hours) {
hours = hours[0].replace("h","");
totalTimeInSeconds += hours * 60 * 60;
}
if (minutes) {
minutes = minutes[0].replace("m","");
totalTimeInSeconds += minutes * 60;
}
if (seconds) {
seconds = seconds[0].replace("s","")
totalTimeInSeconds += seconds * 1;
}
console.log("hours:"+hours);
console.log("minutes:"+minutes);
console.log("seconds:"+seconds);
console.log("TotalTimeInSeconds:"+ totalTimeInSeconds);
<iframe width="420" height="345"
src="http://www.youtube.com/embed/XGSy3_Czz8k?start="+totalTimeInSeconds>
</iframe>
var url=”http://youtu.be/XGSy3_Czz8k?t=1h5m16s";
var timeStamp=url.match(“t=()*?[&|(\s)]”;
var hours=时间戳[0]。匹配(/(\d)+h/);
var minutes=时间戳[0]。匹配(/(\d)+m/);
var seconds=时间戳[0]。匹配(/(\d)+s/);
var totalTimeInSeconds=0;
若有(小时){
小时数=小时数[0]。替换(“h”,替换为“);
totalTimeInSeconds+=小时*60*60;
}
若有(分钟){
分钟=分钟[0]。替换为(“m”,替换为“);
totalTimeInSeconds+=分钟*60;
}
如果(秒){
秒=秒[0]。替换(“s”,“”)
totalTimeInSeconds+=秒*1;
}
控制台日志(“小时:+小时);
console.log(“分钟数:+分钟数”);
console.log(“秒:+秒);
log(“TotalTimeInSeconds:+TotalTimeInSeconds”);
我认为获得代码评论的好来源是
您可以删除字符串。通过稍微调整正则表达式使其如下所示来替换调用:
var hours = timeStamp[0].match(/(\d+)h/);
var minutes = timeStamp[0].match(/(\d+)m/);
var seconds = timeStamp[0].match(/(\d+)s/);
if (hours) {
totalTimeInSeconds += parseInt(hours[1], 10) * 60 * 60;
}
if (minutes) {
totalTimeInSeconds += minutes[1] * 60;
}
if (seconds) {
totalTimeInSeconds += seconds[1];
}
使用这些正则表达式,您可以一次捕获所有数字,然后像这样使用它们:
var hours = timeStamp[0].match(/(\d+)h/);
var minutes = timeStamp[0].match(/(\d+)m/);
var seconds = timeStamp[0].match(/(\d+)s/);
if (hours) {
totalTimeInSeconds += parseInt(hours[1], 10) * 60 * 60;
}
if (minutes) {
totalTimeInSeconds += minutes[1] * 60;
}
if (seconds) {
totalTimeInSeconds += seconds[1];
}
这里不需要使用parseInt
,
但我可能会引入它,以便更明确地说明转换正在发生。我还建议调整timeStamp
变量的正则表达式,这样它就可以进一步缩小t
参数的范围。试试这个
var url ="http://youtu.be/XGSy3_Czz8k?t=1h5m16s";
var timeStamp = url.match("t=(.)*?[&|(\s)]");
timeStampSplitted = timeStamp[0].replace("t=","").replace("h", ":").replace("m", ":").replace("s", "").split(':');
// minutes are worth 60 seconds. Hours are worth 60 minutes.
var seconds = (+timeStampSplitted[0]) * 60 * 60 + (+timeStampSplitted[1]) * 60 + (+timeStampSplitted[2]);
我认为最简单的方法是使用
RegExp
replace
函数:
var seconds = "1h5m16s".replace(/([0-9]+)h([0-9]+)m([0-9]+)s/, function(match, p1, p2 ,p3) {
return p1 * 60 * 60 + p2 * 60 + p3 * 1
})
注
p3*1
-它是parseInt
的快捷方式。另外请注意,replace
将返回一个字符串-如果需要,请不要忘记将其转换为数字。您知道Moment.js吗?这是最好的插件,操作日期而不令人心碎。看一看,当t=1h45s时(YouTube时间戳中的小时、分钟和秒都是可选的),这将失败。当t=1h45s时,这将失败(YouTube时间戳中的小时、分钟和秒都是可选的)。