I think this is a working method for reversing strings while respecting unicode characters:
function badReverse(str) {
return str.split('').reverse().join('');
}
function goodReverse(str) {
let c = [];
str.replace(/[\u{0000}-\u{10FFFF}]/gu, (char) => {
c.unshift(char);
});
return c.join('');
}
console.log(badReverse('😉abc😱ḉ123是👶'));
// ��是321ḉ��cba��
console.log(goodReverse('😉abc😱ḉ123是👶'));
// 👶是321ḉ😱cba😉