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

时间:2016-04-18 14:33:49

标签: javascript regex

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

  

heapdump.20160406.214053.18914.0013.phd   heapdump.20160406.214053.18914.0013.phd.gz   javacore.20160406.214053.18914.0002.txt   javacore.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

由于

3 个答案:

答案 0 :(得分:3)

这将有效

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

<强> Regex Demo

JS代码

&#13;
&#13;
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)
&#13;
&#13;
&#13;

答案 1 :(得分:0)

这取决于您希望解决方案的准确程度。如果您只有phdtxt个扩展程序,则可以使用

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

这意味着:以heapdump开头的字符串,后跟任何内容,然后是点,然后是phd或txt,行尾

或者你可以简单地否定以dot gz结尾的字符串

/.*\.gz$/

答案 2 :(得分:0)

一个不需要使用正则表达式的选项是将句点(.)上的文件名拆分为数组,然后检查数组的最后一个元素是否包含扩展名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");
}