用于分割字符串的正则表达式
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);
我发现这个 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);