如何将包含上标的字符串转换为普通字符串?
例如我有一个包含
"n⁵"
的字符串。我想把它改成"n5"
。对于字符串 "n⁵"
,我没有使用任何 <sup></sup>
标签。和你看到的一模一样。
要替换每个字符,您可以将所有上标字符组装成一个有序字符串(例如,
⁰
位于索引0,¹
位于索引1等),并通过indexOf
获取其对应的数字:
function digitFromSuperscript(superChar) {
var result = "⁰¹²³⁴⁵⁶⁷⁸⁹".indexOf(superChar);
if(result > -1) { return result; }
else { return superChar; }
}
然后您可以通过此函数运行字符串中的每个字符。例如,您可以通过
replace
回调来执行此操作:
"n⁵".replace(/./g, digitFromSuperscript)
或更优化,将替换限制为仅考虑上标字符:
"n⁵".replace(/[⁰¹²³⁴⁵⁶⁷⁸⁹]/g, digitFromSuperscript)
没什么花哨的:您可以将
⁵
字符替换为 5
字符。
var result = "n⁵".replace("⁵", "5");
console.log(result);
您可以使用带有替换功能的正则表达式替换:
function replaceSupers(str) {
var superMap = {
'⁰': '0',
'¹': '1',
'²': '2',
'³': '3',
'⁴': '4',
'⁵': '5',
'⁶': '6',
'⁷': '7',
'⁸': '8',
'⁹': '9'
}
return str.replace(/[⁰¹²³⁴⁵⁶⁷⁸⁹]/g, function(match) {
return superMap[match];
});
}
console.log(replaceSupers('a¹²n⁴⁵lala⁷⁸⁹'));
还值得检查 String.prototype.normalize(form) 函数,它可能会起作用。
console.log('n²'.normalize('NFKD'));
console.log('H₂O'.normalize('NFKD'));