Для этого вы можете использовать регулярное выражение. Чтобы свести на нет возможность ложного срабатывания, когда целевая строка встречается в слове, вы можете использовать регулярное выражение специально для строк st
, nd
, rd
или th
, когда они следуйте целому числу 1 или 2 символа в длину. Попробуйте это:
["NIFTY 16th JAN 12300 CE", "rd ND 21st April"].forEach(v => {
let output = v.replace(/(\d{1,2})(st|nd|rd|th)/gi, '$1<sup>$2</sup>');
console.log(output);
});