Так а что в конечной строке то должно быть? \n или <br>
Если <br>, то сначала заменяешь < и > на < и >, а потом \n на <br>.
И только сначала & заменить на & а потом уже все остальное
<!DOCTYPE HTML>
<html>
<head>
<title>Untitled</title>
<meta charset="utf-8">
</head>
<body>
<p id="p"></p>
<script>
function escapeHTML(text) {
return text.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/\n/g, '<br>');
}
let str = `asd
asd <jopa></jopa> <h1></h1>`;
let json = JSON.stringify(escapeHTML(str));
let txt = JSON.parse(json);
p.innerHTML = txt;
</script>
</body>
</html>