Label以...结尾的文本域

以某字符结尾文本域
1、因为涉及到字符分割,所以引用了npm包stringz,新项目需要执行以下命令
【1】npm init
【2】npm install stringz
2、使用到了inspector,自定义inspector的tail_label.js放到了packages里
3、重写了一些Label的属性,ts脚本有报错,用//@ts-ignore屏蔽了(抱歉并不知道如何优雅解决)
4、二分查找可能存在问题

希望大佬看到代码存在的问题后批评指正,万分感谢!

下面是demo,为了论坛增砖添瓦。
TailLabel.zip (878.6 KB)

同求大佬.

我测试过, Array.from(string),得到的数组可以正确处理 emoji,不会截断

image

这个是对比图
image

你的问题应该是由于charCode和codePoint的区别引起的。
以下文档可以帮助你了解它们的区别:
String.prototype.charCodeAt()
String.prototype.codePointAt()
网上也有很多人有相关研究,搜索下关键词即可。

string.length处理日常的文本时没有问题。
但是如果遇到emoji等使用两个码元的字符,就会出错。
比如":grinning:".length会返回2,但实际上只有一个emoji字符…

stringz表现正常估计是因为它兼容了这个问题(我没有查看源码),所以你也可以用类似的方法解决~
当使用两个码元表示一个字符时,是有固定格式的。上面附的链接里你应该可以找到解决方案。

复杂的emojo就不行了的,比如这个image ,在论坛里就显示成下面这样了。。。:woman:t4:‍🦳

我写的这个是成品,可以直接用的!

您好,我看了下大佬提供的链接,底层编码的逻辑不是很懂,但是我觉得String提供的方法并不能解决复杂的字符问题,因为有的字占用1个字符,有的占用2个字符,有的占用4个字符,判断逻辑比较复杂。引入其他文本库(比如grapheme-splitter、stringz),可以让我们不用再关心这些,使用起来也比较简单,我仅仅是偷懒而已。

嗯,看来我测的还不到位

字符相关的介绍
https://mathiasbynens.be/notes/javascript-unicode