忽略文件扩展名的正则表达式

Regular expressions ignoring a file extension

本文关键字:正则表达式 扩展名 文件      更新时间:2023-09-26

我需要一些正则表达式方面的帮助。我有以下4个文件名

堆料2016 0406.214053.18914.0013.phd堆料2016 0406.214053.18914.0013.phd.gzjavacore.20160406.214053.18914.0002.txtjavacore.20160406.214053.18914.0002.txt.gz

基本上,我需要的是让我的正则表达式忽略末尾带有.gz的文件。我尝试了以下操作,但似乎不起作用。

/heapdump.*.phd|javacore.*.txt/i
/heapdump*.phd|javacore*.txt/i
/heapdump.'d+.'d+.'d+.'d+.phd|javacore.'d+.'d+.'d+.'d+.txt/i

感谢

这将适用于

(?!.*'.gz$)(^.*$)

Regex演示

JS代码

var re = /(?!.*'.gz$)(^.*$)/gm; 
var str = 'heapdump.20160406.214053.18914.0013.phd'nheapdump.20160406.214053.18914.0013.phd.gz'njavacore.20160406.214053.18914.0002.txt'njavacore.20160406.214053.18914.0002.txt.gz';
var result = str.match(re);
document.writeln(result)

这取决于您希望解决方案精确到什么程度。如果您只有phdtxt扩展,这将适用于

/heapdump.*'.(phd|txt)$/

这意味着:一个以heapdump开头的字符串,后跟whatever,然后是一个点,然后是phd或txt,最后是行

或者,您可以简单地否定以句点gz结尾的字符串

/.*'.gz$/

一个不需要使用正则表达式的选项是将句点(.)上的文件名拆分为一个数组,然后检查数组的最后一个元素是否包含扩展名gz:

var filename = "heapdump.20160406.214053.18914.0013.phd.gz";
var parts = filename.split(".");
if (parts[parts.length - 1] == 'gz') {
    alert("ignore this file");
}
else {
    alert("pay attention to this file");
}