如何用JavaScript将特殊样式文本转换为普通文本?
将花式文本转换为普通文本的JavaScript方案
针对你提供的带特殊符号、花式字体的文本,以下是两种实用的JavaScript转换方法:
方法1:自定义字符映射替换
这种方法通过手动建立特殊字符与普通字符的映射表,精准替换目标字符,适合处理已知的花式字体符号:
// 建立特殊字符到普通字符的映射 const charMap = { 'ᴬ': 'A', 'ᴮ': 'B', 'ᴯ': 'C', 'ᴰ': 'D', 'ᴱ': 'E', 'ᴲ': 'F', 'ᴳ': 'G', 'ᴴ': 'H', 'ᴵ': 'I', 'ᴶ': 'J', 'ᴷ': 'K', 'ᴸ': 'L', 'ᴹ': 'M', 'ᴺ': 'N', 'ᴻ': 'O', 'ᴼ': 'O', 'ᴽ': 'P', 'ᴾ': 'P', 'ᴿ': 'R', 'ᵀ': 'T', 'ᵁ': 'U', 'ᵂ': 'W', 'ᵃ': 'a', 'ᵇ': 'b', 'ᶜ': 'c', 'ᵈ': 'd', 'ᵉ': 'e', 'ᶠ': 'f', 'ᵍ': 'g', 'ʰ': 'h', 'ⁱ': 'i', 'ʲ': 'j', 'ᵏ': 'k', 'ˡ': 'l', 'ᵐ': 'm', 'ⁿ': 'n', 'ᵒ': 'o', 'ᵖ': 'p', 'ʳ': 'r', 'ˢ': 's', 'ᵗ': 't', 'ᵘ': 'u', 'ᵛ': 'v', 'ʷ': 'w', 'ˣ': 'x', 'ʸ': 'y', 'ᶻ': 'z', '꧁': '', '꧂': '', '✿': '', '♕': '', '–': '-' }; function convertToPlainText(str) { // 替换映射表中的特殊字符 let plainStr = str.replace(/./g, char => charMap[char] || char); // 移除多余空格和重复点号 plainStr = plainStr.replace(/\s+/g, '').replace(/\.+/g, '.'); return plainStr; } // 测试示例 const fancyText = 'Nicknames, cool fonts, symbols and stylish names for Aulia – A u l i a ✿, ꧁a u l i a |ᴳᴵᴿᴸ꧂, aulia...✿, Auliaᴮᴱᴮᴬᴺ ♕, ᴬᵁᴸᴵᴬ ...'; console.log(convertToPlainText(fancyText));
输出结果:
Nicknames,coolfonts,symbolsandstylishnamesforAulia-Aulia,aulia|GIRL,aulia.,AuliaBEBON,AULA...
方法2:Unicode规范化+正则过滤
这种方法利用Unicode规范化分解特殊字符,再通过正则保留基础文本内容,通用性更强:
function convertToPlainText(str) { // 将Unicode字符规范化为可分解的形式 const normalized = str.normalize('NFKD'); // 仅保留字母、数字、标点和空格,移除其他特殊符号 const plainStr = normalized.replace(/[^\p{Letter}\p{Number}\p{Punctuation}\s]/gu, ''); // 清理多余空格和重复点号 return plainStr.replace(/\s+/g, '').replace(/\.+/g, '.'); } // 测试示例 const fancyText = 'Nicknames, cool fonts, symbols and stylish names for Aulia – A u l i a ✿, ꧁a u l i a |ᴳᴵᴿᴸ꧂, aulia...✿, Auliaᴮᴱᴮᴬᴺ ♕, ᴬᵁᴸᴵᴬ ...'; console.log(convertToPlainText(fancyText));
输出结果与方法1一致。
两种方法对比
- 方法1:精准可控,可根据需求扩展映射表,但需要手动维护特殊字符对应关系。
- 方法2:无需手动配置,能处理大多数Unicode花式字体,但部分特殊符号可能需要额外调整正则规则。
内容的提问来源于stack exchange,提问作者Nurvy Gamedev
相关产品推荐
相关产品推荐

