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

标签 javascript utf-8 substring emoji

在我的 js 中,我正在尝试 substring() 文本,该文本通常有效但不幸的是会破坏表情符号。

usaText = "A🇺🇸Z"
splitText = usaText.substring(0,2) //"A�"
splitText = usaText.substring(0,3) //"A🇺"
splitText = usaText.substring(0,4) //"A🇺�"
splitText = usaText.substring(0,5) //"A🇺🇸"

有没有办法在不破坏表情符号的情况下使用子字符串?在我的生产代码中,我削减了大约 40 个字符,我不介意它是 35 还是 45。我考虑过简单地检查第 40 个字符是数字还是介于 a-z 之间,但是如果你有文本,那将不起作用充满表情符号。我可以检查最后一个字符是否是通过模式匹配“结束”表情符号的字符,但这在性能方面似乎也有点奇怪。

我错过了什么吗?由于 JavaScript 的所有膨胀,是否没有内置的 count 将 emoji 视为一个?

Split JavaScript string into array of codepoints? (taking into account "surrogate pairs" but not "grapheme clusters")事情:

chrs = Array.from( usaText )
(4) ["A", "🇺", "🇸", "Z"]
0: "A"
1: "🇺"
2: "🇸"
3: "Z"
length: 4

不幸的是,太多了。

最佳答案

所以这真的不是一件容易的事,我倾向于告诉你,你不应该自己写这个。您应该使用像 runes 这样的库.

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

const runes = require('runes');
const usaText = "A🇺🇸Z";
runes.substr(usaText, 0, 2); // "A🇺🇸"

关于不拆分表情符号的 JavaScript 子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52526719/

相关文章:

php - 如何在PHP中获取 "_"之前的字符串

双引号之间的 JavaScript 文本

javascript - 设计模式以避免延迟返回的 promise 覆盖更快的 promise ?

javascript - 如何指定 :focus property in JSS?

javascript - 如何使用 javascript 更改 Canvas 中动画的颜色?

mysql - 如何将 MySQL 数据库从 Latin-1 迁移到 UTF-8?

在r中读取带有西类牙语字符(´,ñ)的csv文件

javascript - 从 json 字符串中的 json 中提取值

string - Lua unicode,使用 string.sub() 和两字节字符

sql-server - tsql : how to do a substring replace?