Один из способов решения вашей проблемы - сохранить HashMap (он же словарь или карта).
Допустим, имя файла равно Apple_F001_sd_mov-imx30_vpal_a4x3 IMX30i 4x3; PCM 768kbps 48kHz 16bits.mov
Затем,Вы можете сохранить карту, где Apple_F001.mov
- это ключ, а значение - это его исходное имя Apple_F001_sd_mov-imx30_vpal_a4x3 IMX30i 4x3; PCM 768kbps 48kHz 16bits.mov
.
. Далее, я предполагаю, что все файлы будут иметь одинаковый формат:
Если это так, мы можем создать регулярное выражение для извлечения первого слова, следующего за первым буквенно-цифровым значением, а затем расширения, чтобы создать ключ.
Если они этого не сделают, тогда нужно принять какое-то суровое решение.Мой совет - выбрать несколько символов, чтобы вы могли использовать подстроку метода, а затем объединить их с расширением.
// So let say these are the filenames
var filenames = [
'Apple_F001_sd_mov-imx30_vpal_a4x3 IMX30i 4x3; PCM 768kbps 48kHz 16bits.mov'
, 'Banana_F002_hd_mov-proresHQ422-vpal_a16x9 ProRes 422HQ 1080/25p; PCM 1152kbps 48kHz 24bits.mpg'
, 'Carrot_F003_hd_mxf-xdcam422_vpal_a16x9 XDCAM HD422 1080/50i; PCM 768kbps 48kHz 24bits.avi'];
var fileMap = {};
for (filename in filenames){
const regex = /^([A-Za-z]+_[A-Z0-9]+)_\w[\w ;\-\/]+(\.\w+)/gm;
var tokens = regex.exec(filenames[filename]);
if (null != tokens){
var key = tokens[1].concat(tokens[2]);
var value = tokens[0];
fileMap[key] = value;
}
}
console.log(fileMap);
Результат:
{
"Apple_F001.mov": "Apple_F001_sd_mov-imx30_vpal_a4x3 IMX30i 4x3; PCM 768kbps 48kHz 16bits.mov",
"Banana_F002.mpg": "Banana_F002_hd_mov-proresHQ422-vpal_a16x9 ProRes 422HQ 1080/25p; PCM 1152kbps 48kHz 24bits.mpg",
"Carrot_F003.avi": "Carrot_F003_hd_mxf-xdcam422_vpal_a16x9 XDCAM HD422 1080/50i; PCM 768kbps 48kHz 24bits.avi"
}
Теперь вы можете использовать клавишу для отображения короткого имени файла и отслеживать реальное имя файла, которое вы будете использоватьиспользуйте позже для доступа.
Объяснение
Регулярное выражение /^([A-Za-z]+_[A-Z0-9]+)_\w[\w ;\-\/]+(\.\w+)/gm
говорит, что нужно извлечь значения, совпадающие с указанными в скобках, в данном случае ^([A-Za-z]+_[A-Z0-9]+)
.Символ ^
говорит о том, что он будет «начинаться с», круглые скобки означают, что мы извлечем информацию, [A-Za-z]+
означает одну или несколько только буквенных символов, [A-Z0-9]+
означает только заглавные буквы и цифры, а (\.\w+)
означает, что мыполучить что-нибудь после точки (включительно).
Мы повторяем имена файлов и выполняем регулярное выражение regex.exec(filenames[filename])
для каждого из них, чтобы извлечь массив токенов.Первый токен, с индексом 0, его полное соответствие (вся строка, которая соответствует критериям), второй токен с индексом 1 взят из первой круглой скобки ^([A-Za-z]+_[A-Z0-9]+)
, которая является именем файла, и третьего токена,в индексе 2 соответствует второй круглой скобке (\.\w+)
для имени файла.
Затем мы создаем пару ключ / значение и добавляем ее в карту с именем fileMap fileMap[key] = value;
Позвольте мнезнать, если у вас есть вопросы.