Как можно заменять нечитабельные символы?

у меня есть текст например: "ЌŘĮŜŤÃĹЌĮĹĹ",мне нужно чтобы код перевёл его в "Kristalkill",можно ли как-то это сделать без ввода вручную символов жсон,и подальшим реплейсом,или если есть уже готовая база с такими символами(Которую можно скачать)


Ответы (1 шт):

Автор решения: vsemozhebuty

Ваша строчка состоит из букв с диакритиками, причём диакритики не отдельно от букв, а объединённые в один символ. Чтобы оставить буквы, нужно два шага:

  1. Декомпозиция (отделение букв и диакритик) при помощи String.prototype.normalize().
  2. Удаление небуквенных символов при помощи Unicode Property Escapes.

Потом уже можно заняться исправлением регистра.

(UPD: добавлено сохранение цифр и эмодзи, см. комментарии)

const str = "ЌŘĮŜŤÃĹЌĮĹĹ123\u{231A}\u{2194}\u{FE0F}\u{1F469}\u{1F469}\u{1F3FF}";
console.log(str);

const cleaned = str
  .normalize("NFD")
  .replace(/[^\p{Letter}\p{Number}\p{Emoji_Modifier_Base}\p{Emoji_Modifier}\p{Emoji_Presentation}\p{Emoji}\uFE0F]/gu, '');
console.log(cleaned);

const name = cleaned[0].toUpperCase() + cleaned.slice(1).toLowerCase();
console.log(name);

→ Ссылка