本帖最后由 Sealy497800473 于 2011-07-27 10:36:40 编辑

解决方案 »

  1.   

    var str = '00:02:25,435 --> 00:02:28,980';
    function time_translate(str) {
        var ar = str.split(/\s-->\s/);
        var t1 = ar[0];
        var t2 = ar[1];
        
        function ms(t) {
            var ar = t.split(',');
            var p1 = ar[0], p2 = ar[1];
            var ar = p1.split(':'), result;
            result = (parseInt(ar[0]) * 3600 + parseInt(ar[1]) * 60 + parseInt(ar[2])) * 1000 + parseInt(p2);
            return result;
        }
        return ms(t1) + ',' + ms(t2);
    }
    alert(time_translate(str));
      

  2.   

    那个只是例子,数字是我自己写的,只是想表达我的意思而已!谢谢啦,还有  
    想请教一下   
    25
    00:02:15,134 --> 00:02:17,844
    在数钱的那个
    The guy who keeps counting his chips?26
    00:02:20,222 --> 00:02:22,849
    - 他赚了多少?
    - 至少10000
    - What's he into us for?
    - At least 10,000.像上面的字幕这样 如何找出其数据结构,我想把时间轴,中文,英文都分别用写出一个函数待调用!  
    不清楚如何分析找出中文,英文分别再哪几行
      

  3.   

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>无标题文档</title>
    <script type="text/javascript">
    function subtitles(type) {
    var str = document.getElementById('subtitles').innerHTML;
    var ar_tmp = str.split(/[\r\n]+/); //分行
    var ar = [];
    for(var i = 0; i < ar_tmp.length; i ++) if (ar_tmp[i].length > 0) ar.push(ar_tmp[i]); //去掉空行

    var result = {SECTION: [], TIMELINE:[], CN: [], EN: []}; //成员分别代表字幕段号、时间轴、中文字幕、英文字幕

    ar_tmp = new Array(); //ar_tmp临时数组接下去用于保存字幕段索引号
    for(var i = 0; i < ar.length; i ++) {
    if (ar[i].match(/^\d+$/)) {
    ar_tmp.push(i);
    result['SECTION'].push(ar[i]);
    result['TIMELINE'].push(ar[i + 1]);
    }
    }

    for(var i = 1; i <= ar_tmp.length; i ++) {
    var arCN = [], arEN = [];

    //计算每段字幕的行数(包括中英文,中文行数应该与英文的行数是相同的,比如共有6行字幕,其中3行是中文,3行是英文)
    var j;
    if (i < ar_tmp.length) j = ar_tmp[i] - ar_tmp[i - 1] - 2;
    else j = ar.length - ar_tmp[i - 1] - 2;
    for(k = 0; k < j / 2; k ++) arCN.push(ar[ar_tmp[i - 1] + 2 + k]);
    for(k = j / 2; k < j; k ++) arEN.push(ar[ar_tmp[i - 1] + 2 + k]);
    result['CN'].push(arCN);
    result['EN'].push(arEN);
    }
    return result[type];
    }window.onload = function() {
    document.getElementById('btn_TIMELINE').onclick = function() {
    var timeline = subtitles('TIMELINE');
    document.getElementById('result').innerHTML = timeline.join('<br />');
    }
    document.getElementById('btn_CN').onclick = function() {
    var CN = subtitles('CN');
    var html = '';
    for(var i = 0; i < CN.length; i ++) html += CN[i].join('<br />') + '<br />';
    document.getElementById('result').innerHTML = html;
    }
    document.getElementById('btn_EN').onclick = function() {
    var EN = subtitles('EN');
    var html = '';
    for(var i = 0; i < EN.length; i ++) html += EN[i].join('<br />') + '<br />';
    document.getElementById('result').innerHTML = html;
    }
    document.getElementById('btn_S2').onclick = function() {
    document.getElementById('result').innerHTML = subtitles('SECTION')[1] + '<br />' + subtitles('TIMELINE')[1] + '<br />' + subtitles('CN')[1].join('<br />') + '<br />' + subtitles('EN')[1].join('<br />');
    }
    }
    </script>
    </head><body>
    <pre id="subtitles">
    25
    00:02:15,134 --> 00:02:17,844
    在数钱的那个
    The guy who keeps counting his chips?26
    00:02:20,222 --> 00:02:22,849
    - 他赚了多少?
    - 至少10000
    - What's he into us for?
    - At least 10,000.
    </pre>
    <input type="button" id="btn_TIMELINE" value="时间轴" /><input type="button" id="btn_CN" value="中文字幕" /><input type="button" id="btn_EN" value="英文字幕" />
    <input type="button" id="btn_S2" value="显示第二段" /><div id="result"></div>
    </body>
    </html>