这是我的初始字符串:
我使用了一种不那么优雅的方式来打破表情符号。
=if(len(I88) = 4, REGEXEXTRACT(I88,"(.+?)\s*(.+?)"),if(len(I88) = 6, REGEXEXTRACT(I88,"(.+?)\s*(.+?)\s*(.+?)"),if(len(I88) = 8, REGEXEXTRACT(I88,"(.+?)\s*(.+?)\s*(.+?)\s*(.+?)"),if(len(I88) = 10, REGEXEXTRACT(I88,"(.+?)\s*(.+?)\s*(.+?)\s*(.+?)\s*(.+?)"), REGEXEXTRACT(I88,"\s*(.+?)" )))))
结果是4列而不是3列:这就是它的样子
| | |
我离开管道指示一个单独的列
我想要的是:
| |
答案 0 :(得分:1)
要正确分隔三个表情符号,我们需要使用custom function。 Fortunaly有一些JavaScript库可用于此the one,answer分享到Orlin Giorgiev到Get grapheme character count in javascript strings?
OP公式返回四个元素而不是三个元素,因为Google表格内置函数需要四个“字符”(实际上它们是代码点),需要超过4个十六进制数字来表示它们。表示表情符号的每组“字符”称为“星体代码点”。
来自https://mathiasbynens.be/notes/javascript-unicode
Astral代码点非常容易识别:如果您需要超过4个十六进制数字来表示代码点,那么它就是一个星号代码点。
在内部,JavaScript [以及Google表格内置函数]将星体符号表示为surrogate pairs和it exposes the separate surrogate halves as separate “characters”。如果使用ECMAScript 5兼容的转义序列表示只使用符号的符号,您将看到每个星体符号需要两个转义符。这很令人困惑,因为人们通常会考虑使用Unicode符号或字形。
function SPLITGRAPHEMES(string) { var splitter = new GraphemeSplitter(); return splitter.splitGraphemes(string); }
注意:不要忘记包含referred JavaScript library
假设A1包含。要在1 x 3阵列中拆分三个表情符号,请使用以下公式:
=TRANSPOSE(SPLITGRAPHEMES(A1))
注意:在Windows中,此Q& A中的表情符号()与Chrome操作系统中的表情符号不同,因此在上一段中使用了图像。