j0hnik, а сочетанные буквы? Вы
вбросили свой пример на форум даже не проверив его работоспособность!
Ваш пример неправильно разбивает на
графемы! Вот пример...
Неправильная разбивка текста
<div id="text" style="font-size: 2em;">안녕하세요 😂 </div>
<script>
text.innerHTML = text.innerHTML.replace(/./gi, '<span>$&</span>');
setInterval(() => text.appendChild(document.querySelector('span')), 50);
</script>
В данном случае нужна
нормализация!
Немного более правильная разбивка текста
<div id="text" style="font-size: 2em;">안녕하세요 😂 </div>
<script>
text.innerHTML = text.innerHTML.normalize().replace(/./gi, '<span>$&</span>');
setInterval(() => text.appendChild(document.querySelector('span')), 50);
</script>
Хотя метод normalize не может обработать все случаи, он достаточно хорошо работает с большинством старых текстов. Современные тексты, которые содержат новые символы, эмоджи, флаги и пр. не могут быть правильно обработаны при помощи этого метода.
Для правильного разбиения текста используйте
Grapheme Splitter.
Правильная разбивка текста
<script src="https://unpkg.com/grapheme-splitter@1.0.4/index.js"></script>
<div id="text" style="font-size: 2em;">안녕하세요 😂 </div>
<script>
var splitter = new GraphemeSplitter();
text.innerHTML = splitter.splitGraphemes(text.innerHTML).map(g => `<span>${g}</span>`).join("");
setInterval(() => text.appendChild(text.querySelector('span')), 50);
</script>