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

我使用正则表达式随时创建字幕数组,其中包括 [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">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>


慕森卡
浏览 89回答 1
1回答

交互式爱情

替换/gm为/g,否则, the$指的是第一个“Text”行的末尾,并且正则表达式不会尝试匹配其后的任何内容:let subtitle = document.getElementById('subtitle').value;console.log(_subtitle(subtitle));function _subtitle(text) {&nbsp; let Subtitle = text;&nbsp; let Pattern = /(\d+)\n([\d:,]+)\s+-{2}\>\s+([\d:,]+)\n([\s\S]*?(?=\n{2}|$))/g;&nbsp; let _regExp = new RegExp(Pattern);&nbsp; let result = [];&nbsp; if (typeof(text) != "string") throw "Sorry, Parser accept string only.";&nbsp; if (Subtitle === null) return Subtitle;&nbsp; let Parse = Subtitle.replace(/\r\n|\r|\n/g, '\n');&nbsp; let Matches;&nbsp; while ((Matches = Pattern.exec(Parse)) != null) {&nbsp; &nbsp; result.push({&nbsp; &nbsp; &nbsp; Line: Matches[1],&nbsp; &nbsp; &nbsp; Start: Matches[2],&nbsp; &nbsp; &nbsp; End: Matches[3],&nbsp; &nbsp; &nbsp; Text: Matches[4],&nbsp; &nbsp; })&nbsp; }&nbsp; return result;}#warning {&nbsp; background-color: #e74e4e;&nbsp; color: #fff;&nbsp; font-family: Roboto;&nbsp; padding: 14px;&nbsp; border-radius: 4px;&nbsp; margin-bottom: 14px}textarea {&nbsp; width: 100%;&nbsp; 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>
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript