const regex = /(.+)(?:[Ss _\.](\d{2,})[Ee _\.](\d{2,}))[\. _](\d{3,4}p)?(.+)?.*?\-(.+?)(?:\[(.+)\])?\.(\w+)/g;
// Alternative syntax using RegExp constructor
// const regex = new RegExp('(.+)(?:[Ss _\\.](\\d{2,})[Ee _\\.](\\d{2,}))[\\. _](\\d{3,4}p)?(.+)?.*?\\-(.+?)(?:\\[(.+)\\])?\\.(\\w+)', 'g')
const str = `Ridiculousness.S07E15.HDTV.x264-TASTETV[eztv].mp4
Portlandia.S06E03.HDTV.x264-KILLERS[eztv].mp4
Life.in.Pieces.S01E15.HDTV.x264-KILLERS[eztv].mp4
Portlandia.S06E03.720p.HDTV.x264-KILLERS[eztv].mkv
Idiotsitter.S01E04.HDTV.x264-KILLERS[eztv].mp4
Lip.Sync.Battle.S02E05.720p.HDTV.x264-ALTEREGO[eztv].mkv
Lip.Sync.Battle.S02E05.HDTV.x264-ALTEREGO[eztv].mp4
Shades.of.Blue.S01E05.720p.HDTV.x264-AVS[eztv].mkv
Shades.of.Blue.S01E05.720p.HDTV.x264-FLEET[eztv].mkv
Colony.S01E04.720p.HDTV.x264-KILLERS[eztv].mkv
Shades.of.Blue.S01E05.HDTV.x264-FLEET[eztv].mp4
Baskets.S01E03.INTERNAL.720p.HDTV.x264-KILLERS[eztv].mkv
Baskets.S01E03.INTERNAL.HDTV.x264-KILLERS[eztv].mp4
Workaholics.S06E04.720p.HDTV.x264-KILLERS[eztv].mkv
Baskets.S01E03.HDTV.x264-FLEET[eztv].mp4
Baskets.S01E03.720p.HDTV.x264-FLEET[eztv].mkv
The.Blacklist.S03E13.720p.HDTV.x264-AVS[eztv].mkv
The.100.S03E03.720p.HDTV.x264-AVS[eztv].mkv
Angel.From.Hell.S01E05.HDTV.x264-LOL[eztv].mp4
Angel.From.Hell.S01E05.720p.HDTV.X264-DIMENSION[eztv].mkv
The.100.S03E03.HDTV.x264-FLEET[eztv].mp4
Mom.S03E10.HDTV.x264-LOL[eztv].mp4
Mom.S03E10.720p.HDTV.X264-DIMENSION[eztv].mkv
Life.in.Pieces.S01E15.720p.HDTV.x264-AVS[eztv].mkv
Elementary.S04E11.HDTV.x264-LOL[eztv].mp4
Elementary.S04E11.720p.HDTV.X264-DIMENSION[eztv].mkv
DCs.Legends.of.Tomorrow.S01E03.HDTV.x264-LOL[eztv].mp4
The.Vampire.Diaries.S07E11.HDTV.x264-LOL[eztv].mp4
DCs.Legends.of.Tomorrow.S01E03.720p.HDTV.X264-DIMENSION[eztv].mkv
The.Vampire.Diaries.S07E11.720p.HDTV.X264-DIMENSION[eztv].mkv
Saving.Hope.S04E16.HDTV.x264-BAJSKORV[eztv].mp4
Saving.Hope.S04E16.720p.HDTV.x264-BAJSKORV[eztv].mkv
The.Big.Bang.Theory.S09E14.HDTV.x264-LOL[eztv].mp4
The.Ellen.DeGeneres.Show.2016.02.04.HDTV.x264-ALTEREGO[eztv].mp4
The.Ellen.DeGeneres.Show.2016.02.04.720p.HDTV.x264-ALTEREGO[eztv].mkv
Teachers.2016.S01E04.REPACK.720p.HDTV.x264-ALTEREGO[eztv].mkv
Celebrity.Big.Brothers.Bit.On.The.Side.S10E24.720p.HDTV.x264-C4TV[eztv].mkv
Long.Island.Medium.S07E03.HDTV.x264-CRiMSON[eztv].mp4
Celebrity.Big.Brothers.Bit.On.The.Side.S10E24.HDTV.x264-C4TV[eztv].mp4
Clarence.US.S02E06.Time.Crimes.720p.HDTV.x264-W4F[eztv].mkv
Clarence.US.S02E06.Time.Crimes.HDTV.x264-W4F[eztv].mp4
Clarence.US.S02E05.Ren.Faire.720p.HDTV.x264-W4F[eztv].mkv
Clarence.US.S02E05.Ren.Faire.HDTV.x264-W4F[eztv].mp4
Great.British.Railway.Journeys.Series.7.05of20.Ashley.to.Alton.720p.x264.HDTV[eztv].mp4
Celebrity.Big.Brother.S17E35.HDTV.x264-C4TV[eztv].mp4
James.Corden.2016.02.03.Rosie.ODonnell.HDTV.x264-TASTETV[eztv].mp4
James.Corden.2016.02.03.Rosie.ODonnell.720p.HDTV.x264-TASTETV[eztv].mkv
Mr Robot S01E10 2015 HDTV x264 - SPARKS.wmv`;
// Reset `lastIndex` if this regex is defined globally
// regex.lastIndex = 0;
let m;
while ((m = regex.exec(str)) !== null) {
// This is necessary to avoid infinite loops with zero-width matches
if (m.index === regex.lastIndex) {
regex.lastIndex++;
}
// The result can be accessed through the `m`-variable.
m.forEach((match, groupIndex) => {
console.log(`Found match, group ${groupIndex}: ${match}`);
});
}
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for JavaScript, please visit: https://developer.mozilla.org/en/docs/Web/JavaScript/Guide/Regular_Expressions