【问题标题】:How to iterate over only the characters in a string I can actually see?如何仅迭代我实际可以看到的字符串中的字符?
【发布时间】:2016-04-22 04:40:29
【问题描述】:

通常我只会使用str[i]之类的东西。

但是如果str = "☀️????????"呢?

str[i] 失败。 for (x of str) console.log(x) 也失败了。它总共打印出 4 个字符,即使字符串中显然只有 2 个表情符号。

迭代字符串中我可以看到的每个字符(我猜还有换行符)的最佳方法是什么?

理想的解决方案将返回一个由 2 个字符组成的数组:2 个表情符号,仅此而已。 声称的副本以及我发现的许多其他解决方案不符合此标准.

【问题讨论】:

标签: javascript unicode surrogate-pairs astral-plane


【解决方案1】:

我最终以这个疯狂的 JS 库的形式找到了答案:

https://github.com/orling/grapheme-splitter

【讨论】:

    【解决方案2】:

    你需要为星体角色制定自己的方法。

    "foo?bar".match(/[\uD800-\uDBFF][\uDC00-\uDFFF]|./g);
    // => ["f", "o", "o", "?", "b", "a", "r"]
    

    【讨论】:

    • 这并不适用于所有情况。考虑"foo?b☀️ar".match(/[\uD800-\uDBFF][\uDC00-\uDFFF]|./g);
    • @thedayturns:是的,我只介绍了星体字符,这是 JavaScript “错误地”将单个 Unicode 字符拆分为两个 JS 字符的地方。空字符串有一个 VARIATION SELECTOR 16 (U+FE0F),它是一个单独的 Unicode 字符,但与前面结合;类似的问题是所有组合字符,如 COMBINING ACUTE ACCENT (U+0301)。因此,要解决 那个 问题,您需要一个完整的库,这超出了 StackOverflow 答案的范围。
    猜你喜欢
    • 1970-01-01
    • 2019-07-15
    • 1970-01-01
    • 1970-01-01
    • 2014-03-06
    • 2010-10-24
    • 1970-01-01
    • 2014-04-15
    • 2018-06-25
    相关资源
    最近更新 更多