首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将srt文件解析为<br>数组时,将srt解析为javascript时出现问题

将srt文件解析为<br>数组时,将srt解析为javascript时出现问题
EN

Stack Overflow用户
提问于 2019-05-13 15:02:30
回答 1查看 470关注 0票数 1

我正在尝试用javascript解析srt文件。我发现了一些来自stackoverflow的代码,但是有一个问题。我逐行解析srt文件,以识别字幕、时间和字幕文本的行。但是,当代码读取字幕文本时,我的代码只能读取字幕的每一部分一行,而字幕的某些部分包括2行或某些行。

这是我的代码

代码语言:javascript
复制
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) {
                    var hms_start = group[2].replace(',', ':').split(':');   

                    var hms_end = group[3].replace(',', ':').split(':');   

                    return {
                      line: group[1],
                      startTime: (+hms_start[0]) * 60 * 60 + (+hms_start[1]) * 60 + (+hms_start[2]) +'.'+ hms_start[3],
                      endTime: (+hms_end[0]) * 60 * 60 + (+hms_end[1]) * 60 + (+hms_end[2]) +'.'+ hms_end[3],
                      text: group[4]
                    };
                  }
                  init();
                  return {
                    parse: parse
                  }
                }();

// execution
// result is the entire line of srt subtitle file
PF_SRT.parse(result);

我希望输出的是

代码语言:javascript
复制
6
00:00:32,616 --> 00:00:41,496
{\a2}{\c&HFFFFFF&}{\fnTahoma} And 23 of them say forget it
you say this thing never worked 
because there's no such thing called internet in the world

代码语言:javascript
复制
6
00:00:32,616 --> 00:00:41,496
{\a2}{\c&HFFFFFF&}{\fnTahoma} And 23 of them say forget it<br>you say this thing never worked<br>because there's no such thing called internet in the world
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-13 15:14:15

使用此行,您可以找到常见的换行符,并将它们替换为\n换行符。

代码语言:javascript
复制
f = f.replace(/\r\n|\r|\n/g, '\n')

您需要对其进行修改,以将HTML换行符<br>替换为换行符。

例如:

代码语言:javascript
复制
f = f.replace(/\r\n|\r|\n|<br>/g, '\n')
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56107212

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档