Javascript .replace и очистка .srt

У меня есть файл .srt с таким текстом:

19
00:01:05,100 --> 00:01:08,820
странах, таких как Испания. Еще один фактор для

20
00:01:08,820 --> 00:01:11,850
считается южной оконечностью побережья Испании

21
00:01:11,850 --> 00:01:15,060
Быть так близко к северной Африке могло бы быть


Я нашел этот код, который очень хорошо работает при очистке информации, но этот код оставляет начальные числа (они могут быть от одной до четырех цифр)

результат:

19 стран, таких как Испания. Другим фактором, который следует учитывать, является южная оконечность испанского побережья, 21 столь близкая к северной Африке.

Есть идеи, как убрать цифры?

Это мой код:

 <script>
            document.querySelector('#files').addEventListener('change', (e) => {
                
                let files = e.target.files,
                    i = 0,
                    reader = new FileReader;
            
                
                reader.onload = (e) => {
                    //console.info(files[i].name, e.target.result);
                    var fileName = files[i].name;
                    var text = e.target.result;

                    text = text.replace(/WEBVTT[\r\n]/,"");
                    text = text.replace(/NOTE duration:.*[\r\n]/,"");
                    text = text.replace(/NOTE language:.*[\r\n]/,"");
                    text = text.replace(/NOTE Confidence:.+\d/g,"");
                    text = text.replace(/NOTE recognizability.+\d/g,"");
                    text = text.replace(/[\r\n].+-.+-.+-.+-.+/g,"");
                    text = text.replace(/[\r\n].+ --> .+[\r\n]/g,"");
                    text = text.replace(/.[\r\n]. --> .+[\r\n]/g,"");
                    text = text.replace(/[\n](.)/g," $1");
                    text = text.replace(/[\r\n]+/g,"");
                    text = text.replace(/^ /,"");
                
                    var heading = document.createElement('h3');
                    document.body.appendChild(heading);
                    heading.innerHTML = "Transcript for '" + files[i].name + "'";
                
                    var copyButton = document.createElement('button');
                    document.body.appendChild(copyButton);
                    copyButton.onclick = function() {copyToClip(text,fileName); };
                    copyButton.innerHTML = "Copy transcript";
                    copyButton.className = "copyButton";
                
                    var div = document.createElement('div');
                    document.body.appendChild(div);
                    div.className = "cleanVTTText";
                    div.innerHTML = text;
            
                    //console.info(files[i].name, text);
                    console.info(files[i].name);
                    
                    
                    if (i++ < files.length - 1) {
                        reader.readAsText(files[i]);
                    } else {
                        console.info('done');
                        
                    }
                };
                
                reader.readAsText(files[i]);
            
            }, false);
            
            function copyToClip(str,fileName) {
                function listener(e) {
                e.clipboardData.setData("text/html", str);
                e.clipboardData.setData("text/plain", str);
                e.preventDefault();
                }
                document.addEventListener("copy", listener);
                document.execCommand("copy");
                document.removeEventListener("copy", listener);
                alert("Copied transcript to clipboard:\n'"+fileName+"'");
            };     
            </script>

Включите образец исходного текста, который нуждается в очистке.

Nick 21.11.2022 10:40

Вот пример текста: WEBVTT 1 00:00:00,940 --> 00:00:04,630 Впервые ослы были приручены около 6000 лет назад 2 00:00:04,630 --> 00:00:08,620 назад в Северной Африке и Египте. прежде всего для 3 00:00:08,620 --> 00:00:12,820 их молока и их мяса. А около 2000 лет 4 00:00:12,820 --> 00:00:15,970 назад ослы использовались в качестве тягловых животных, перевозя 5 00:00:15,970 --> 00:00:19,720 шелк из Тихого океана в Средиземное. 6 00:00:19,720 --> 00:00:23,350 по шелковому пути. Это было в обмен на торговлю

Richie C 21.11.2022 11:36

@RichieC, я обновляю свою базу ответов на ваш новый пример.

Simone Rossaini 21.11.2022 14:55
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
3
71
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Вместо использования replace я предлагаю другое решение, используя split для разделения строки на основе новых строк, а затем вы получаете массив, в котором вы можете построить строку так, как хотите.

let text = `19
00:01:05,100 --> 00:01:08,820
countries such as Spain. Another factor to

20
00:01:08,820 --> 00:01:11,850
consider is the southern tip of Spain's coast

21
00:01:11,850 --> 00:01:15,060
being so close to northern Africa could have`
let newtext = text.split('\n').filter(el => el !== '' && !el.includes('-->') && el.match(/[^A-Za-z0-9\-_]/) );
console.info(newtext);
console.info('Just for example:');
console.info(`${newtext[0]} ${newtext[1]} ${newtext[2]}`);

Ссылка:

Вы можете удалить весь текст, который начинается с необязательной пустой строки, затем строки с одним целым числом и, наконец, одной строки с отметками времени, разделенными «-->» (включая любые завершающие символы новой строки).

Необязательная строка WEBVTT не является частью исходного стандарта crt, но ее можно удалить в том же проходе:

function cleanCrt(text) {
    return text.replace(/^(WEBVTT\b.*)?[\r\n]*\d+(?:\r\n?|\n)[\d:,.]* --> [\d:,.]*[\r\n]*/gm, "");
}

const text = `WEBVTT
1
00:00:00,940 --> 00:00:04,630
Donkeys were first domesticated around 6000 years

2
00:00:04,630 --> 00:00:08,620
ago in northern Africa and Egypt, primarily for

3
00:00:08,620 --> 00:00:12,820
their milk and their meat. And around 2000 years

4
00:00:12,820 --> 00:00:15,970
ago, donkeys were used as draft animals, carrying 

5
00:00:15,970 --> 00:00:19,720
silk from the Pacific Ocean to the Mediterranean

6
00:00:19,720 --> 00:00:23,350
along the silk route. This was in return for trade [...]

19
00:01:05,100 --> 00:01:08,820
countries such as Spain. Another factor to

20
00:01:08,820 --> 00:01:11,850
consider is the southern tip of Spain's coast

21
00:01:11,850 --> 00:01:15,060
being so close to northern Africa could have`;

console.info(cleanCrt(text));
Ответ принят как подходящий

Для этой проблемы сработало добавление этой строки кода:

text = text.replace(/\n?\d*?\n?^.* --> [012345]{2}:.*$/mg ,"");  

Другие вопросы по теме