JavaScript-подстрока без разделения эмодзи - PullRequest
0 голосов
/ 27 сентября 2018

в моем 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-й символ числом или между az, но это не сработало бы, если вы получили текстполный смайликовЯ мог бы проверить, является ли последний символ тем, который «заканчивает» эмодзи сопоставлением с образцом, но это также кажется немного странным с точки зрения производительности.

Я что-то упустил?При всем раздутии, которое несет JavaScript, нет ли встроенного count, который рассматривает эмодзи как единое целое?

Чтобы разбить строку JavaScript на массив кодовых точек?(принимая во внимание «суррогатные пары», но не «кластеры графем») вещь:

chrs = Array.from( usaText )
(4) ["A", "?", "?", "Z"]
0: "A"
1: "?"
2: "?"
3: "Z"
length: 4

К сожалению, это слишком много.

1 Ответ

0 голосов
/ 27 сентября 2018

Так что это не так легко сделать, и я склонен сказать вам, что вы не должны писать это самостоятельно.Вам следует использовать библиотеку, например runes .

Просто npm i runes, тогда:

const runes = require('runes');
const usaText = "A??Z";
runes.substr(usaText, 0, 2); // "A??"
...