Regex для исключения шаблона в имени файла
Мой текущий шаблон:
/\.(scss|js|jsx)$/
Я хочу исключить файлы, которые заканчиваются на "-test.js"
Я пробовал:
/(?!-test)\.(scss|js|jsx)$/
но это не работает
3 ответа
Поскольку JS не поддерживает lookbehind, вы можете сделать ^(?!.*-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'));
})
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
Попробуй это:
/^([a-z0-9-_](?!-test\.))+\.(scss|js|jsx)$/
Ни один из символов имени файла не должен сопровождаться -test.
,