JSFiddle - React, Tailwind, and code Playground

by slove

HTML

<div id="console"></div>

JavaScript

var regexSurrogatePair = /([\uD800-\uDBFF])([\uDC00-\uDFFF])/g;
var regexSurrogateStart = /[\uD800-\uDBFF]/; // '𝌆'.split('')[0].match(regexSurrogateStart) -> true
var regexSurrogateEnd = /[\uDC00-\uDFFF]/;

function reverse(someString) {

    var result = someString.split("").reverse();
    
    var i = 0;
    while (i < result.length) {
        if (regexSurrogateEnd.test(result[i]) && regexSurrogateStart.test(result[i + 1])) {
            swap(result, i, i+1);
        }
    }
            
    return result.join("");
}

var output = reverse('foo𝌆bar');

//'foo \uD834\uDF06 bar' // [r,a,b,\uDF06,\uD834,o,o,f]
// [r,a,b,\uD834,\uDF06,o,o,f]

$('#console').text(output);

console.log(output);