正则表达式排除文件名

时间:2017-07-03 14:28:39

标签: javascript regex filenames negative-lookahead

我目前的模式是:

/\.(scss|js|jsx)$/  

我想排除以“-test.js”结尾的文件

我试过了:

/(?!-test)\.(scss|js|jsx)$/

但它不起作用。

3 个答案:

答案 0 :(得分:2)

由于JS不支持lookbehind,您可以^(?!.*-test\.js$).*\.(js|scss|jsx)$作为解决方法。

Regex Demo

var testFiles = ['p-test.js',
  'q-test.scss',
  'r-test.jsx',
  'p.js',
  'q.scss',
  'r.jsx',
  'sadadf-testddd.js'
];
var myRegexp = /^(?!.*-test\.js$).*\.(js|scss|jsx)$/g;
testFiles.forEach(function(file) {
  var match = file.match(myRegexp)
  console.log(file + " : " + (match ? 'matches' : 'does not match'));
})

答案 1 :(得分:1)

js|jsx可以使用以下内容进行优化/加速:jsx? scss可以加快scs{2}的速度 缩短"替代品"在较长时间之前会提高速度。 (jsx?|scs{2})

模式:

/^(.(?!-test\.js$))+\.(jsx?|scs{2})$/

或近一半的步骤,由于删除了捕获组:

/^(?!.*-test\.js$).*\.(jsx?|scs{2})$/

Demo

测试用例:

a-test.js      #fail
b-test.scss    #pass 
c-test.jsx     #pass
d.js           #pass
e.scss         #pass
f.jsx          #pass
g-testg.js     #pass
h-testh.scss   #pass
i-testi.jsx    #pass

答案 2 :(得分:0)

试试这个:

/^([a-z0-9-_](?!-test\.))+\.(scss|js|jsx)$/

文件名的所有字符都不应跟-test.