JavaScript 不拆分表情符号的子字符串
JavaScript substring without splitting 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"
有没有办法在不破坏表情符号的情况下使用子字符串?在我的生产代码中,我削减了大约 40 个字符,我不介意它是 35 还是 45。我考虑过简单地检查第 40 个字符是数字还是介于 a-z 之间,但是如果你有文本,那将不起作用充满表情符号。我可以通过模式匹配检查最后一个字符是否 "ends" 表情符号,但这在性能方面似乎也有点奇怪。
我错过了什么吗? 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 = "AZ";
runes.substr(usaText, 0, 2); // "A"
免责声明:这只是对 Mike 'Pomax' Kamermans 的上述评论的扩展,因为对我来说,这实际上是一个更简单、适用的答案(对于我们这些不喜欢通读所有评论的人) :
Array.from(str) 将您的字符串拆分为单独的 unicode 字符,而不在字节之间打断它们。
详情见Split JavaScript string into array of codepoints? (taking into account "surrogate pairs" but not "grapheme clusters")。
这段代码对我有用:
splitText = Array.from(usaText).slice(0, 5).join('');
在我的 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 之间,但是如果你有文本,那将不起作用充满表情符号。我可以通过模式匹配检查最后一个字符是否 "ends" 表情符号,但这在性能方面似乎也有点奇怪。
我错过了什么吗? 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 = "AZ";
runes.substr(usaText, 0, 2); // "A"
免责声明:这只是对 Mike 'Pomax' Kamermans 的上述评论的扩展,因为对我来说,这实际上是一个更简单、适用的答案(对于我们这些不喜欢通读所有评论的人) :
Array.from(str) 将您的字符串拆分为单独的 unicode 字符,而不在字节之间打断它们。
详情见Split JavaScript string into array of codepoints? (taking into account "surrogate pairs" but not "grapheme clusters")。
这段代码对我有用:
splitText = Array.from(usaText).slice(0, 5).join('');