RegEx用于分割字符串

时间:2019-05-27 23:34:32

标签: regex string regex-lookarounds regex-group regex-greedy

我发现了这个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

1 个答案:

答案 0 :(得分:1)

此表达式具有四个捕获组:

(.+?)\.([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 = `$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