正则表达式中的文件名排除图案
问题描述:
我现在的模式是:正则表达式中的文件名排除图案
/\.(scss|js|jsx)$/
我希望排除与结尾的文件“-test.js”
我已经试过:
/(?!-test)\.(scss|js|jsx)$/
但它不工作。
答
js|jsx
可以通过使用jsx?
来完善/加速。 scss
可以通过使用scs{2}
加速。
把较短的“替代品”放在较长的“替代品”之前会提高速度。 (jsx?|scs{2})
模式:
/^(.(?!-test\.js$))+\.(jsx?|scs{2})$/
或近一半的步骤,由于去除捕获组:
/^(?!.*-test\.js$).*\.(jsx?|scs{2})$/
测试用例:
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
答
由于JS不支持逆向查看,因此可以使用^(?!.*-test\.js$).*\.(js|scss|jsx)$
作为解决方法。
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'));
})
什么语言/环境将您可以在运行这种模式?你能提供几个样本输入和你的预期结果吗?请发布您的语言特定的正则表达式实现。 – mickmackusa
javascript,文件名blabla.js应该匹配,blabla-test.js不应该匹配。所有与.scss和.jsx应匹配。用于webpack config – jeff