用于分割字符串的正则表达式

RegEx for segmenting a string

我发现这个 Answer 关于如何使用 RegExp 传递电影名称,它工作正常但不完全是我需要的。

输入的字符串是:2001.A.Space.Odyssey.1968.720p.BluRay.DD5.1.x264-LiNG.mkv

答案中使用的正则表达式是这样的:^(.+).(\d{4}).+.(mp4|avi|mkv)$output 是:

2001.A.Space.Odyssey
1968
mkv 

我需要的是如下所示:

2001.A.Space.Odyssey
1968
LiNG
mkv 

我的尝试是:^(.+).(\d{4}).+([^_]).(mp4|avi|mkv)$output 是:

2001.A.Space.Odyssey
1968
G
mkv 

如何获得 LiNG 而不是 G

这个表达式有四个捕获组:

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

我们想要的输出在哪里。

电影名称在第一个捕获组中:

(.+?)

后跟 . 和第二组中所需的年份:

([0-9]{4})

之后是所有其他内容,直到最后一个破折号,这里是最后一句话:

(.+)

并且所需的扩展在最后一个捕获组中:

(mkv|avi|mp4)

DEMO

测试

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

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

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