Недавно столкнулся с вполне ясной и скорее всего распространённой задачей когда необходимо создать имя файла из набора переменных и последняя часть должна включать в себя имя компании. Т.к. файл в процессе кочует по серверам и его конечная точка для пользователя - это хранилище S3, то решено было максимально позаботиться о 2-х моментах: в имени файла не должно быть пробелов, имя файла состоит строго из латинских символов, хоть S3 (если разработан на правильных стандартах) и поддерживает Unicode. 

Чтобы не захломлять строками кода основной программный модуль, то решено было сделать так:

const str = 'АО "Рога и Копыта и Терентьев"';
const result = (s => s.replace(/"/g, '').replace(/\s+/g, '_').replace(/[а-яё]/gi, c => ({'а':'a','б':'b','в':'v','г':'g','д':'d','е':'e','ё':'e','ж':'zh','з':'z','и':'i','й':'y','к':'k','л':'l','м':'m','н':'n','о':'o','п':'p','р':'r','с':'s','т':'t','у':'u','ф':'f','х':'h','ц':'c','ч':'ch','ш':'sh','щ':'shch','ъ':'','ы':'y','ь':'','э':'e','ю':'yu','я':'ya'}[c.toLowerCase()] || c).replace(/^./, x => x.toUpperCase())))(str);

console.log(result); 
// Вывод: AO_Roga_i_Kopyta_i_Terentev

Немного пояснений к каждой части replace с применением регулярных выражений:

  • .replace(/"/g, '') — удаляет все двойные кавычки.
  • .replace(/\s+/g, '_') — заменяет пробелы (и группы пробелов) на один знак подчеркивания _.
  • .replace(/[а-яё]/gi, ...) — перебирает все русские буквы и заменяет их на латинские согласно массива.
  • В массиве: 'ь': '' — мягкий знак просто отсутствует, поэтому он исключается.
  • Логика внутри сохраняет регистр (заглавные остаются заглавными).
  • В примере "Терентьев" превращается в "Terentev" (мягкий знак исчезает).