Я загружаю файл, и мне нужно проверить, принадлежит ли имя файла определенному шаблону или нет.
Пример: AL-13-Ежегодный аудит DSH.pdf
Первые два символа «AL» могут быть любыми, но это будут только 2 символа в верхнем регистре, за которыми следует тире (-), за которым следует двухзначное число, за которым следует тире (-), за которым следуют остальные («Ежегодный аудит DSH .pdf').
Это то, что я сделал до сих пор.
[A-Z]{2}[\-][0-9]{2}[\-][A]{1}[nnual]{5}\s[DSH]{3}\s[A]{1}[udit]{4}\.[pdf]{3}
Пожалуйста посоветуй. Не уверен, как действовать дальше, чтобы упростить это.
Всегда ли будет присутствовать «Ежегодный аудит DSH» или это может быть любая строка? У меня складывается впечатление из вашего вопроса, что дело именно в этом, просто проверяю.
/^[A-Z]{2}-\d{2}-/@FelixKling исправил регулярное выражение. В любом случае, чтобы упростить это?
Должны ли все имена файлов содержать подстроку "Annual DSH Audit.pdf"?
[...] обозначают группы символов, т.е. «соответствуют любому из этих символов». Таким образом, [nnual] совпадает с [nual], а [nnual]{5} соответствует nnnnn или nnuul. Если вы буквально хотите сопоставить определенную последовательность символов, вы просто записываете их как есть. Не используйте группу символов: Annual\sDSH\sAuditДа, похоже, файлы, которые он загружает, должны иметь одну и ту же строку с одинаковыми регистрами.
все после последнего . ? Любая причина, по которой это не сработает?
Вы должны проверить этот веб-сайт для тестирования шаблонов регулярных выражений, это очень полезно: regexr.com/4a34v



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


const matchesFormat = str => /^[A-Z]{2}-\d{2}-.+\.pdf$/.test(str);
console.info( matchesFormat('AL-13-Annual DSH Audit.pdf') ); // true
console.info( matchesFormat('ZZ-00-test.pdf') ); // true
console.info( matchesFormat('AL-13-Annual DSH Audit.jpg') ); // false
console.info( matchesFormat('AL-13Annual DSH Audit.pdf') ); // false
console.info( matchesFormat('K-13-Annual DSH Audit.pdf') ); // false
console.info( matchesFormat('AL-2-Annual DSH Audit.pdf') ); // falseи если вам нужно также сопоставить отдыхAnnual DSH Audit.pdf, чем:
https://regex101.com/r/NNtx6o/1
const isAuditPDF = str => /^[A-Z]{2}-\d{2}-Annual\sDSH\sAudit\.pdf$/.test(str);
console.info( isAuditPDF('AL-13-Annual DSH Audit.pdf') ); // true
console.info( isAuditPDF('ZZ-00-test.pdf') ); // false
console.info( isAuditPDF('AL-1-Annual DSH Audit.pdf') ); // falseПытаться
^[A-Z]{2}-\d\d-
let t= /^[A-Z]{2}-\d\d-/.test('AL-13-Annual DSH Audit.pdf');
console.info(t);^[A-Z]{2}-\d{2}-Annual\sDSH\sAudit\.pdf$
* Отредактировано в соответствии с вашими требованиями
Ссылка на демо - https://regexr.com/4a344
Если вы хотите сопоставить тире после двух символов верхнего регистра, то это именно то, что вам нужно добавить:
[A-Z]{2}-. Добавьте персонажей, которые вы упомянули в описании. Если вы знаете, как сопоставить два символа в верхнем регистре, я предполагаю, что вы знаете, как сопоставить две цифры. Так в чем же проблема?