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

如何对包含高码点字符的字符串进行分块?

问题原因与解决方案

问题根源

你的问题核心在于JavaScript字符串的编码特性和正则表达式的默认行为:

  • 码点1114111(0x10FFFF)是Unicode补充平面字符,在JS中会被编码为两个UTF-16代理对单元(0xD83F和0xDFFF),因此这个字符在字符串中占2个UTF-16编码位置。
  • 正则表达式默认的.元字符仅匹配单个UTF-16单元,而非完整的Unicode码点。因此/.{2}/g会将3(1个UTF-16单元)与代理对的第一个单元组合成一组,代理对的第二个单元与9组合成另一组,最终得到错误的['3�', '�9']。

解决方案

给正则添加u修饰符,开启Unicode模式,此时.会匹配完整的Unicode码点(无论其占用多少个UTF-16单元)。修改后的代码如下:

"3􏿿97".match(/.{2}/gu)

执行后将得到期望结果:['3􏿿', '97']。

如果需要处理字符总数为奇数的场景,可以将正则调整为/.{1,2}/gu,这样最后一组会包含剩余的单个字符。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 18:32:37