为了账号安全,请及时绑定邮箱和手机立即绑定

javascript中字幕的正则表达式中的变量行数

javascript中字幕的正则表达式中的变量行数

慕森卡 2023-10-14 19:00:53
我使用正则表达式随时创建字幕数组,其中包括 [number, start, end, text]/(\d+)\n([\d:,]+)\s+-{2}\>\s+([\d:,]+)\n([\s\S]*?(?=\n{2}|$))/gm但问题是,在文本部分,如果行数为 2 或更多,则不会被读取。在这里您可以看到相关图片我不希望只有该部分中文本的第一行被视为文本,如果还有其他行,也应该被考虑。你帮助我真是帮了我一个大忙。感恩let subtitle = document.getElementById('subtitle').value;console.log(_subtitle(subtitle));function _subtitle(text) {        let Subtitle = text;        let Pattern = /(\d+)\n([\d:,]+)\s+-{2}\>\s+([\d:,]+)\n([\s\S]*?(?=\n{2}|$))/gm;        let _regExp = new RegExp(Pattern);        let result = [];        if (typeof (text) != "string") throw "Sorry, Parser accept string only.";        if (Subtitle === null) return Subtitle;        let Parse = Subtitle.replace(/\r\n|\r|\n/g, '\n');        let Matches;        while ((Matches = Pattern.exec(Parse)) != null) {result.push({                Line: Matches[1],                Start: Matches[2],                End: Matches[3],                Text: Matches[4],            })        }                return result;    }#warning{background-color:#e74e4e;color:#fff;font-family:Roboto;padding:14px;border-radius:4px;margin-bottom:14px}textarea{width:100%;min-height:100px;}<div id="warning">The output is on the console</div><textarea id="subtitle">100:00:00,000 --> 00:00:00,600Hi my friends200:00:00,610 --> 00:00:01,050In the first line, everything works properlyBut there is a problem in the second line that I could not solve :(300:00:01,080 --> 00:00:03,080But then everything is in order and good400:00:03,280 --> 00:00:05,280You do me a great favor by helping me. Thankful</textarea>
查看完整描述

1 回答

?
交互式爱情

TA贡献1712条经验 获得超3个赞

替换/gm/g,否则, the$指的是第一个“Text”行的末尾,并且正则表达式不会尝试匹配其后的任何内容:

let subtitle = document.getElementById('subtitle').value;

console.log(_subtitle(subtitle));


function _subtitle(text) {

  let Subtitle = text;

  let Pattern = /(\d+)\n([\d:,]+)\s+-{2}\>\s+([\d:,]+)\n([\s\S]*?(?=\n{2}|$))/g;

  let _regExp = new RegExp(Pattern);

  let result = [];


  if (typeof(text) != "string") throw "Sorry, Parser accept string only.";

  if (Subtitle === null) return Subtitle;


  let Parse = Subtitle.replace(/\r\n|\r|\n/g, '\n');

  let Matches;


  while ((Matches = Pattern.exec(Parse)) != null) {

    result.push({

      Line: Matches[1],

      Start: Matches[2],

      End: Matches[3],

      Text: Matches[4],

    })


  }


  return result;

}

#warning {

  background-color: #e74e4e;

  color: #fff;

  font-family: Roboto;

  padding: 14px;

  border-radius: 4px;

  margin-bottom: 14px

}


textarea {

  width: 100%;

  min-height: 100px;

}

<div id="warning">The output is on the console</div>


<textarea id="subtitle">1

00:00:00,000 --> 00:00:00,600

Hi my friends


2

00:00:00,610 --> 00:00:01,050

In the first line, everything works properly

But there is a problem in the second line that I could not solve :(


3

00:00:01,080 --> 00:00:03,080

But then everything is in order and good


4

00:00:03,280 --> 00:00:05,280

You do me a great favor by helping me. Thankful</textarea>


查看完整回答
反对 回复 2023-10-14
  • 1 回答
  • 0 关注
  • 88 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信