A resposta fornecida pelo PointedEars é tudo o que a maioria de nós precisa. Mas, seguindo a resposta de Mathias Bynens, fiz uma viagem à Wikipedia e encontrei o seguinte: https://en.wikipedia.org/wiki/Newline .
A seguir, é apresentada uma função que implementa tudo o que a página Wiki acima considera "nova linha" no momento desta resposta.
Se algo não se encaixar no seu caso, basta removê-lo. Além disso, se você está procurando desempenho, pode não ser isso, mas uma ferramenta rápida que faça o trabalho em qualquer caso, isso deve ser útil.
// replaces all "new line" characters contained in `someString` with the given `replacementString`
const replaceNewLineChars = ((someString, replacementString = ``) => { // defaults to just removing
const LF = `\u{000a}`; // Line Feed (\n)
const VT = `\u{000b}`; // Vertical Tab
const FF = `\u{000c}`; // Form Feed
const CR = `\u{000d}`; // Carriage Return (\r)
const CRLF = `${CR}${LF}`; // (\r\n)
const NEL = `\u{0085}`; // Next Line
const LS = `\u{2028}`; // Line Separator
const PS = `\u{2029}`; // Paragraph Separator
const lineTerminators = [LF, VT, FF, CR, CRLF, NEL, LS, PS]; // all Unicode `lineTerminators`
let finalString = someString.normalize(`NFD`); // better safe than sorry? Or is it?
for (let lineTerminator of lineTerminators) {
if (finalString.includes(lineTerminator)) { // check if the string contains the current `lineTerminator`
let regex = new RegExp(lineTerminator.normalize(`NFD`), `gu`); // create the `regex` for the current `lineTerminator`
finalString = finalString.replace(regex, replacementString); // perform the replacement
};
};
return finalString.normalize(`NFC`); // return the `finalString` (without any Unicode `lineTerminators`)
});