RegEx для сегментации строки - PullRequest
3 голосов
/ 28 мая 2019

Я нашел этот Ответ о том, как регистрировать названия фильмов с помощью RegExp, он работает нормально, но не совсем так, как мне нужно.

Входная строка: 2001.A.Space.Odyssey.1968.720p.BluRay.DD5.1.x264-LiNG.mkv

Регулярное выражение, которое использовалось в ответе следующим образом: ^(.+).(\d{4}).+.(mp4|avi|mkv)$ и вывод :

2001.A.Space.Odyssey
1968
mkv 

Что мне нужно, это как показано ниже:

2001.A.Space.Odyssey
1968
LiNG
mkv 

Моя попытка была: ^(.+).(\d{4}).+([^_]).(mp4|avi|mkv)$, но вывод :

2001.A.Space.Odyssey
1968
G
mkv 

Как я могу получить LiNG вместо G?

1 Ответ

1 голос
/ 28 мая 2019

Это выражение имеет четыре группы захвата:

(.+?)\.([0-9]{4}).+?-(.+)\.(mkv|avi|mp4)

где наши желаемые результаты.

Название фильма входит в первую группу захвата:

(.+?)

, затем . и желаемый год во второй группе:

([0-9]{4})

сопровождается всем остальным до последней черты, и здесь у нас есть последнее слово:

(.+)

и нужные расширения находятся в последней группе захвата:

(mkv|avi|mp4)

DEMO

Test

const regex = /(.+?)\.([0-9]{4}).+?-(.+)\.(mkv|avi|mp4)/;
const str = `2001.A.Space.Odyssey.1968.720p.BluRay.DD5.1.x264-LiNG.mkv`;
const subst = `$1\n$2\n$3\n$4`;

// The substituted value will be contained in the result variable
const result = str.replace(regex, subst);

console.log('Substitution result: ', result);

enter image description here

...