在我的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"
有没有一种方法可以使用子字符串而不破坏表情符号?在我的生产代码中,我削减了约40个字符,我不介意是35还是45。我曾想过只检查第40个字符是数字还是在a到z之间,但是如果收到文本,那将不起作用充满表情符号。我可以检查最后一个字符是否是通过模式匹配“结束”表情符号的字符,但这在性能上似乎也有些怪异。
我想念什么吗? JavaScript带来的所有膨胀,没有内置的count
将表情符号视为一体?
chrs = Array.from( usaText )
(4) ["A", "", "", "Z"]
0: "A"
1: ""
2: ""
3: "Z"
length: 4
不幸的是,那太多了。
答案 0 :(得分:3)
所以这并不是一件容易的事,我倾向于告诉你,你不应该自己写这个。您应该使用runes之类的库。
只需一个简单的npm i runes
,然后:
const runes = require('runes');
const usaText = "AZ";
runes.substr(usaText, 0, 2); // "A"
答案 1 :(得分:2)
免责声明:这只是扩展Mike'Pomax'Kamermans的上述评论,因为对我来说,这实际上是一个更简单,适用的答案(对于那些不喜欢阅读所有评论的人):
Array.from(str)将字符串拆分为单个unicode字符,而不会在字节之间打断它们。
答案 2 :(得分:1)
此代码对我有用:
splitText = Array.from(usaText).slice(0, 5).join('');