2015-10-15 28 views
2

我試圖解析.srt但我得到一個內部錯誤,我找不出它是什麼。用jQuery解析SRT文件Javascript

這裏是我的代碼:

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.js

誰能幫助我?

謝謝

+0

你能張貼'.srt'文件(或其部分)的內容? – hindmost

+0

@ behindmost我發佈了'.srt'文件的示例,謝謝! – Sergi

+0

@LGSon我編輯了這篇文章,因爲這個功能對我的問題並不重要,謝謝! – Sergi

回答

3
//define variable type - Array 
var subtitles = []; 
jQuery.get('demo.srt', function(data) { 
    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; 

    for(s in srt_) { 
     st = srt_[s].split('\n'); 

     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]; 
      } 

      //define variable type as Object 
      subtitles[cont] = {}; 
      subtitles[cont].number = n; 
      subtitles[cont].start = i; 
      subtitles[cont].end = o; 
      subtitles[cont].text = t; 

     } 
     cont++; 
    } 
}); 

Varibale字幕[續] SH烏爾德被定義爲對象類型指定屬性

演示之前

http://parfait-inc.com/33145672/

+0

當我在這個小提琴演示中運行代碼時,它是http://jsfiddle.net/876sscf7/4/,它在第一次迭代中出錯。你能解釋爲什麼你的演示不? ...順便說一句,當我添加我的修補程序的內部拆分,然後它的作品http://jsfiddle.net/876sscf7/5/ – LGSon

+0

你的小提琴使st [1] .split(' - >')[1]空的變量,因爲line2上的腳本應該執行全局匹配,找到所有匹配,而不是在第一次匹配之後停止。 http://jsfiddle.net/21kd95cj/ – Parfait

+0

哇....我現在看到...我典型的quickfix錯誤之一..感謝您的時間 – LGSon

2

這裏是一個問題:

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(/&gt;/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 + "<br>"; 
 
     cont++; 
 
    } 
 
}
<div id="data" style="display:none">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 
 
</div>