使用jQuery Javascript解析SRT文件

我正在尝试解析.srt但我得到一个内部错误,我无法弄清楚它是什么。

这是我的代码:

  var subtitles; jQuery.get('SB_LKRG-eng.srt', function(data) { //alert(data); function strip(s) { return s.replace(/^\s+|\s+$/g,""); } srt = data.replace(/\r\n|\r|\n/g, '\n'); //alert(srt); srt = strip(srt); //alert(srt); var srt_ = srt.split('\n\n'); alert(srt_); var cont = 0; for(s in srt_) { st = srt_[s].split('\n'); alert(st); if(st.length >=2) { n = st[0]; i = strip(st[1].split(' --> ')[0]); o = strip(st[1].split(' --> ')[1]); t = st[2]; if(st.length > 2) { for(j=3; j<st.length;j++) t += '\n'+st[j]; } subtitles[cont].number = n; subtitles[cont].start = i; subtitles[cont].end = o; subtitles[cont].text = t; //alert(subtitles[cont].start); } cont++; } }); 

我可以提取前4个字幕,然后代码停止并中断exception: TypeError ,我无法理解为什么……这里是字幕文件的示例:

 1 00:00:01,000 --> 00:00:04,000 Descargados de www.AllSubs.org 2 00:00:49,581 --> 00:00:52,049 Bueno, tienes que escapar, tengo que ir a jugar 3 00:00:52,084 --> 00:00:55,178 Tengo que encontrar un día que está lleno de nada más que sol 4 00:00:55,220 --> 00:00:57,552 Crucero por la calle, moviéndose al compás 5 00:00:57,589 --> 00:01:00,683 Todos los que conoces está teniendo nada más que diversión 6 00:01:00,726 --> 00:01:03,251 Deja todo detrás de ti 7 00:01:03,295 --> 00:01:06,128 Siente esas palmeras soplan 8 00:01:06,165 --> 00:01:09,157 La gente en el norte no puede encontrar 9 00:01:09,201 --> 00:01:11,829 Están fuera de palear la nieve 10 00:01:11,870 --> 00:01:14,998 El tiempo para moverse, pero no seas lento 11 00:01:15,040 --> 00:01:17,941 En sus marcas, prepárate para ir 

部分代码来自: http://v2v.cc/~j/jquery.srt/jquery.srt.jshttp://v2v.cc/~j/jquery.srt/jquery.srt.js

谁能帮我?

谢谢

 var PF_SRT = function() { //SRT format var pattern = /(\d+)\n([\d:,]+)\s+-{2}\>\s+([\d:,]+)\n([\s\S]*?(?=\n{2}|$))/gm; var _regExp; var init = function() { _regExp = new RegExp(pattern); }; var parse = function(f) { if (typeof(f) != "string") throw "Sorry, Parser accept string only."; var result = []; if (f == null) return _subtitles; f = f.replace(/\r\n|\r|\n/g, '\n') while ((matches = pattern.exec(f)) != null) { result.push(toLineObj(matches)); } return result; } var toLineObj = function(group) { return { line: group[1], startTime: group[2], endTime: group[3], text: group[4] }; } init(); return { parse: parse } }(); 

  jQuery.get('demo.srt') .done(function(text) { try { //Array with {line, startTime, endTime, text} var result = PF_SRT.parse(text); } catch (e) { //handle parsing error } }); 

演示

https://jsfiddle.net/5v7wz4bq/

这是一个问题:

 o = strip(st[1].split(' --> ')[1]); 

在这一行,当没有任何’ – >’要拆分时,返回的数组长度为1,当你要求数组项2时会出错。

这是另一个:

 subtitles[cont].number = n; .... 

声明的subtitles ,也不是它的属性.number ,……等。

更新

这是一个有效的示例(切换jQuery“读取srt文件”部分的数据)

 var data = document.getElementById("data").innerHTML; data = data.replace(/>/g,">"); function strip(s) { return s.replace(/^\s+|\s+$/g,""); } srt = data.replace(/\r\n|\r|\n/g, '\n'); srt = strip(srt); var srt_ = srt.split('\n\n'); var cont = 0; var subtitles = []; for(s in srt_) { st = srt_[s].split('\n'); if(st.length >=2) { var st2 = st[1].split(' --> '); var t = st[2]; if(st.length > 2) { for(j=3; j < st.length;j++) t += '\n'+st[j]; } subtitles[cont] = { number : st[0], start : st2[0], end : st2[1], text : t } console.log(subtitles[cont].number + ": " + subtitles[cont].text); document.body.innerHTML += subtitles[cont].number + ": " + subtitles[cont].text + "
"; cont++; } }