gpt4 book ai didi

javascript - 如何获取包含零或负宽度字符(如\u0007 或\b)的输出字符串的长度

转载 作者:太空宇宙 更新时间:2023-11-04 00:55:23 25 4
gpt4 key购买 nike

我有一个字符串'aa\b\u0007\u0007'

var a = 'aa\b\u0007\u0007';
console.log(a);
//=> a //+ 2 beeps
console.log(a.length);
//=> 5

这里a.length只是给了我5,但输出的字符串只是a,它的长度只是1。

如何获得它?

最佳答案

这里有几个不同的问题。

首先,不同的环境会以不同的方式呈现该字符串。有些会将钟形字符呈现为实际的字形;其他游戏机(如传统游戏机)则会发出声音。有些也会将(某些)零宽度字符呈现为各种字形。没有人会解释“考虑到退格符和零宽度字符后,这就是该字符串的长度”。

您需要确定要在您的情况下应用的规则。 The Unicode site可能有助于一些传统的解释。或者,如果您只是对解释老式 ASCII 感兴趣,那会容易得多,但当然我们不再生活在 ASCII 世界中(这是一件好事(tm) )。

一旦您制定了规则,根据规则的复杂程度,您可以将它们与一个或多个正则表达式一起应用。例如,这个简单化正则表达式会将退格视为意味着它应该删除前一个字符,并删除字符代码小于 32 的所有其他字符(传统上,“控制字符”)。再说一次,这不完整,在该领域之外还有大量 Unicode 零宽度字符(有各种零宽度空格作为开始)。在 Unicode 范围内彻底完成它将是一个项目,而不是一个微不足道的功能。

但仅举个例子:

function getInterpretedLength(s) {
return s.replace(/(?:.[\b])|[\u0000-\u001f]/g, "").length;
}

第二个问题是,对于某些 Unicode 代码点(宽松地说,“字符”),JavaScript 计算两个 JavaScript 字符,而不是一个。那是因为JavaScript strings are a 16-bit encoding like UTF-16 ,除了它们容忍无效的代理对,并且某些字符使用两个 16 位值进行编码,而不仅仅是一个。

因此,这将是一个大型项目,或者如果您可以根据您实际想要解决的问题对其进行充分限制,那么它可能会小一些。

关于javascript - 如何获取包含零或负宽度字符(如\u0007 或\b)的输出字符串的长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30094385/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com