Я пытаюсь создать способ разбить строку по смайликам и не-смайликам. Мне удалось получить регулярное выражение из здесь и изменить его, чтобы учесть селектор текстового варианта:
(?:(?!(\u00a9|\u00ae|[\u2000-\u3300]|\ud83c[\ud000-\udfff]|\ud83d[\ud000-\udfff]|\ud83e[\ud000-\udfff])+\ufe0e))(\u00a9|\u00ae|[\u2000-\u3300]|\ud83c[\ud000-\udfff]|\ud83d[\ud000-\udfff]|\ud83e[\ud000-\udfff])+
Это работает с .match
, например:
'??'.match(regex) // (["0x1F1E6", "0x1F1E8"]) => ['??']
'??'.match(regex) // (["0x1F1E6", "0x1F1E8", "0xFE0E]) => null
Но split
не дает мне ожидаемых результатов:
'??'.split(regex) // (["", undefined, "?", ""]) => ['??']
Мне нужно split
, чтобы вернуть все смайлики в одном элементе. Что я делаю не так?
РЕДАКТИРОВАТЬ:
У меня есть рабочее регулярное выражение, за исключением показанного здесь крайнего случая: https://regex101.com/r/Vki2ZS/2.
Я не хочу, чтобы второй смайлик совпадал, так как за ним следует текстовый вариант выбора. Я думаю, это потому, что я использую lookahead, поскольку обратная строка соответствует ожидаемому, но я не могу использовать отрицательный взгляд сзади, так как он поддерживается не всеми браузерами.