我有这样的文本文件(字幕):
每行都有文本的开始时间和结束时间
45.123 : 55.002 = this_is_subtitle_of_video
58.101 : 64.022 = next_text_and_so_on
...
...
458.101 : 564.022 = final_text_of_video
从youtube API中,我可以这样获取当前时间(秒)123.06(秒)
当我具有视频的当前时间时(如何使用数组或 另一个数据结构)...
算法应该可以快速运行(在网站上播放视频时)
答案 0 :(得分:0)
您可以split
在每个\n
处的文本并在每一行中循环。然后使用正则表达式
/(\d+.\d+) : (\d+.\d+) = (.*)/
和match
分别将开始时间和结束时间以及字幕放在单独的捕获组中
function findSubtitle(text, time) {
let lines = str.split("\n");
for (let i = 0; i < lines.length; i++) {
[,start, finish, subtitle] = lines[i].match(/(\d+.\d+) : (\d+.\d+) = (.*)/);
if (time >= start && finish >= time) {
return subtitle
}
}
}
let str = `45.123 : 55.002 = this_is_subtitle_of_video
58.101 : 64.022 = next_text_and_so_on
458.101 : 564.022 = final_text_of_video`
console.log(findSubtitle(str, 60.006))
console.log(findSubtitle(str, 48))
如果要从此文本中反复找到字幕,可以使用map
创建字幕数组。每当需要find
字幕时,请使用数组和时间来调用该函数。这样,您不必每次都想要字幕时split
和match
function findSubtitle(array, time) {
let inner = array.find(a => time >= a[0] && a[1] >= time) || [];
return inner[2];
}
let str = `45.123 : 55.002 = this_is_subtitle_of_video
58.101 : 64.022 = next_text_and_so_on
458.101 : 564.022 = final_text_of_video`
let subArray = str.split("\n")
.map(a => a.match(/(\d+.\d+) : (\d+.\d+) = (.*)/).slice(1))
console.log(findSubtitle(subArray, 60))
console.log(findSubtitle(subArray, 48))
答案 1 :(得分:0)
您提到它已经可以在带有小视频的简单阵列中使用,因此您可以简单地用地图替换阵列。
(请参阅https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map)