不拆分表情符号的JavaScript子字符串 [英] JavaScript substring without splitting emoji

查看:56
本文介绍了不拆分表情符号的JavaScript子字符串的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在我的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将表情符号视为一体吗?

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子字符串的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆