You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

遍历含重音字符的字符串时,如何将拆分的重音字符作为整体获取?

解决contenteditable文本中组合重音字符拆分的问题

问题根源

你遇到的问题是因为部分带重音的字符以组合字符序列形式存在(比如x + 独立的重音符U+0301),而非预合成的单个Unicode字符(比如ẋ)。遍历字符串时,组合序列会被拆分成多个代码单元,导致无法匹配Accents数据库中的条目。

解决方案

通过Unicode规范化将组合字符序列合并为单个预合成字符,再用正确的遍历方式处理字符串:

  1. 使用String.normalize('NFC')规范化字符串
    NFC(Normalization Form C)格式会自动将可合并的组合字符序列转换为对应的预合成单个字符,让拆分的重音字符变成和ẋ一样的独立字符。
  2. 改用for...of循环遍历
    for...in遍历的是字符串索引,会拆分组合序列;for...of则能正确识别每个完整的Unicode字符。

修改后的代码

let Accents= { 
    /*...*/
    'x': [
            ["x", 0], 
            ["ẍ", 1], // 组合序列x+U+0301经NFC规范化后会转为该预合成字符
            ["̂x̂", 2], 
            ["ẍ", 2], 
            ["̌x̌", 2], 
            ["ẋ", 1], 
            ["̧x̧", 1],
            ["̱x̱", 1], 
            ["̣x̣", 1], 
            ["ᶍ", 2] 
        ],
     /*...*/
}

$("button").on("click", function(){
  const text = $(".text").text().normalize('NFC');
  for (const char of text) {
    console.log(char);
  }
})

额外说明

如果Accents数据库中仍保留组合序列格式的条目,可将数据库内的所有字符也统一用normalize('NFC')处理,确保两边格式一致,匹配逻辑不会出错。

内容的提问来源于stack exchange,提问作者Luis Gallego

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 23:01:16