(您需要 Firefox 或 Safari 才能看到代码中的表情符号。)
我想拿一串表情符号并对单个字符做一些事情。
在 JavaScript 中"😴😄😃⛔🎠🚓🚇".length == 13
因为"⛔"
长度为 1,其余为 2。所以我们不能这样做
var string = "😴😄😃⛔🎠🚓🚇";
s = string.split("");
c = [];
c[0] = s[0]+s[1];
console.log(c);
(您需要 Firefox 或 Safari 才能看到代码中的表情符号。)
我想拿一串表情符号并对单个字符做一些事情。
在 JavaScript 中"😴😄😃⛔🎠🚓🚇".length == 13
因为"⛔"
长度为 1,其余为 2。所以我们不能这样做
var string = "😴😄😃⛔🎠🚓🚇";
s = string.split("");
c = [];
c[0] = s[0]+s[1];
console.log(c);
JavaScript ES6 有一个解决方案!,对于真正的拆分:
[..."😴😄😃⛔🎠🚓🚇"] // ["😴", "😄", "😃", "⛔", "🎠", "🚓", "🚇"]
耶?除了当你通过你的转译器运行它时,它可能不起作用(见@brainkim 的评论)。它仅在本机运行在符合 ES6 的浏览器上运行时才有效。幸运的是,这包括大多数浏览器(Safari、Chrome、FF),但如果您正在寻找高浏览器兼容性,这不是适合您的解决方案。
编辑:请参阅Orlin Georgiev对库中正确解决方案的回答:https : //github.com/orling/grapheme-splitter
感谢这个答案,我创建了一个函数,它接受一个字符串并返回一个表情符号数组:
var emojiStringToArray = function (str) {
split = str.split(/([\uD800-\uDBFF][\uDC00-\uDFFF])/);
arr = [];
for (var i=0; i<split.length; i++) {
char = split[i]
if (char !== "") {
arr.push(char);
}
}
return arr;
};
所以
emojiStringToArray("😴😄😃⛔🎠🚓🚇")
// => Array [ "😴", "😄", "😃", "⛔", "🎠", "🚓", "🚇" ]
做到这一点的 grapheme-splitter 库即使与旧浏览器也完全兼容,并且不仅适用于表情符号,还适用于各种异国情调的字符:https : //github.com/orling/grapheme-splitter 您可能会错过 edge-任何自制解决方案中的案例。这个实际上是基于 UAX-29 Unicode 标准的
拆分 UTF8 字符串的现代/正确方法是使用Array.from(str)
而不是str.split('')
可以使用u
正则表达式的标志来完成。正则表达式为:
/.*?/u
每次至少有零个或多个字符可能是也可能不是表情符号,但不能是空格或换行符时,这就会被破坏。
?
分成零个字符)*
.
/u
通过使用问号,?
我强制精确地剪切每个零字符,否则/.*/u
它会剪切所有字符,直到找到空格或换行符。
var string = "😴😄😃⛔🎠🚓🚇"
var c = string.split(/.*?/u)
console.log(c)