JavaScript子字符串,不拆分表情符号

use*_*404 4 javascript substring utf-8 emoji

在我的js中,我尝试输入substring()通常可以正常显示的文字,但不幸的是,该文字断头了。

usaText = "AZ"
splitText = usaText.substring(0,2) //"A?"
splitText = usaText.substring(0,3) //"A"
splitText = usaText.substring(0,4) //"A?"
splitText = usaText.substring(0,5) //"A"
Run Code Online (Sandbox Code Playgroud)

有没有一种方法可以使用子字符串而不破坏表情符号?在我的生产代码中,我削减了约40个字符,我不介意是35还是45。我曾想过只检查第40个字符是数字还是在a到z之间,但是如果您收到文本,那是行不通的充满表情符号。我可以检查最后一个字符是否是通过模式匹配“结束”表情符号的字符,但这在性能上似乎也有些怪异。

我想念什么吗?JavaScript带来的所有膨胀,没有内置count将表情符号视为一体的内置功能吗?

要将JavaScript字符串拆分为代码点数组?(考虑“代理对”,但不考虑“字素簇”)

chrs = Array.from( usaText )
(4) ["A", "", "", "Z"]
0: "A"
1: ""
2: ""
3: "Z"
length: 4
Run Code Online (Sandbox Code Playgroud)

不幸的是,那太多了。

Mic*_*ati 7

因此,这确实不是一件容易的事,我倾向于告诉您,您不应该自己编写。您应该使用像runes这样的库。

只是一个简单的npm i runes,然后:

const runes = require('runes');
const usaText = "AZ";
runes.substr(usaText, 0, 2); // "A"
Run Code Online (Sandbox Code Playgroud)

  • 符文代码也写得很简单,它很好地介绍了主要的字素簇分裂问题。我强烈建议阅读代码和测试用例。https://github.com/dotcypress/runes/blob/develop/index.js (2认同)
  • `runes(usaText)` -> `(3) ["A", "", "Z"]`。很好,谢谢! (2认同)