正则表达式返回没有后缀的文件名

时间:2014-09-30 21:52:12

标签: regex

我正在使用BPM软件来自动执行某些过程,在我的流程中,我需要根据名称对某些文件进行分组。

我需要创建一个正则表达式,它返回没有后缀的项目名称。 更大的问题是文件名中的'Foo_Bar'部分,它在每个项目中都会发生变化。

我正在尝试使用前瞻性正则表达式解决它,但出于任何原因它不起作用。

使用正则表达式可以解决这类问题吗?

var arr = [
    'Company-2014-09-19_Foo_Bar_Barcoded_Layout-1.pdf',
    'Company-2014-09-19_Foo_Bar_Barcoded_Layout-2.pdf',
    'Company-2014-09-19_Foo_Bar_Layout-1.pdf',
    'Company-2014-09-19_Foo_Bar_Layout-2.pdf',
    'Company-2014-09-19_Foo_Bar.xml',
    'Company-2014-09-19_Foo_Bar_Report.pdf'
];

re = /Company-\d{4}-\d{2}-\d{2}\w+(?=_Barcoded|_Layout|_Report|\.)/;

for(var i=0; i<arr.length; i++) {
    var match = arr[i].match(re);
    var str = match ? match[0] : null
    console.log(str);
}�

输出:

Company-2014-09-19_Foo_Bar_Barcoded
Company-2014-09-19_Foo_Bar_Barcoded
Company-2014-09-19_Foo_Bar
Company-2014-09-19_Foo_Bar
Company-2014-09-19_Foo_Bar
Company-2014-09-19_Foo_Bar_Report�

预期输出:

Company-2014-09-19_Foo_Bar
Company-2014-09-19_Foo_Bar
Company-2014-09-19_Foo_Bar
Company-2014-09-19_Foo_Bar
Company-2014-09-19_Foo_Bar
Company-2014-09-19_Foo_Bar�

1 个答案:

答案 0 :(得分:0)

我试过这个表达:

(Company-\d{4}-\d{2}-\d{2}\w+?)(?:_Barcoded|_Layout|_Report)*(?:-\d+)?(?:\.\w+)

Regex101 demo: PHP/PCRE
Regex101 demo: Javascript