Actualmente estoy viendo expresiones regulares y emojis, y me gustaría usar escapes de propiedades Unicode para simplificar la tarea.
En https://unicode.org/reports/tr18/#Full_Properties , enumera una serie de propiedades de emoji como Emoji y Emoji_Presentation etc.
Crear una expresión regular usando estos patrones funciona:
const re = /\p{Emoji}/guLa misma página también enumera RGI_Emoji , que es
El conjunto de todos los emoji (caracteres y secuencias) cubiertos por ED-20, ED-21, ED-22, ED-23, ED-24 y ED-25.
o emojis básicos, modificadores, etc., que parecen cubrir todos los casos de uso que estoy viendo.
Sin embargo, crear una expresión regular usando esto:
const re = /\p{RGI_Emoji}/gu Da un error de SyntaxError :
SyntaxError no capturado: nombre de propiedad no válido en expresión regular
La página Unicode menciona que
Las propiedades marcadas con * son propiedades de cadenas, no solo puntos de código únicos.
que RGI_Emoji está marcado como. Mi conocimiento de Unicode no es sorprendente, por lo que no estoy seguro de la forma correcta de usar esto.
¿Es posible usar RGI_Emoji en una expresión regular y, de ser así, cuál es la forma correcta de usarlo?
Las propiedades emoji solo se agregaron a UTS #18 hace relativamente poco tiempo (mediados de 2020), y esto implicó un cambio significativo en el modelo de propiedades de Unicode, ya que implicó definir formalmente por primera vez las propiedades de las cadenas. RGI_Emoji es una propiedad de valor binario de cadenas de caracteres. Un problema potencial para el uso de propiedades de cadena en expresiones regulares es que el conjunto correspondiente a una propiedad de cadena es potencialmente una gran cantidad de cadenas. Para evitar problemas potenciales en implementaciones existentes, UTS #18 permite el uso de la sintaxis \m{Property_Name} para propiedades de cadena. Consulte https://www.unicode.org/reports/tr18/#Resolver_Character_Ranges_with_Strings para obtener más información.
Es posible que la implementación que está usando no se haya actualizado por completo para la Rev. 21 de UTS #18, con soporte para todas las propiedades nuevas, o que requiera que use la sintaxis \m para las propiedades de cadena.
La utilidad en línea Unicode UnicodeSet admite la enumeración de resultados de cadenas de una expresión regular mediante la propiedad RGI_Emoji:
https://util.unicode.org/UnicodeJsps/list-unicodeset.jsp?a=%5Cp%7BRGI_Emoji%7D&g=&i=
RGI_Emoji no está disponible en JavaScript.
Se menciona en la parte superior de la tabla Propiedades completas que,
Las propiedades marcadas con * son propiedades de cadenas, no solo puntos de código únicos.
La compatibilidad con las siguientes sequence properties se propone en la propuesta-regexp-unicode-sequence-properties . La propuesta se encuentra en la etapa 2, es decir, aún no forma parte de la especificación ECMAScript y, por lo tanto, no está disponible.
RGI_Emoji Basic_Emoji Emoji_Keycap_Sequence RGI_Emoji_Modifier_Sequence RGI_Emoji_Flag_Sequence RGI_Emoji_Tag_Sequence RGI_Emoji_ZWJ_Sequence Para confirmar aún más, verifique los \p{UnicodeBinaryPropertyName} en la especificación ECMAScript más reciente. Solo están disponibles las siguientes properties of characters relacionados con los emoji:
Emoji Emoji_Component EComp Emoji_Modifier EMod Emoji_Modifier_Base EBase Emoji_Presentation Tendrá que formar una expresión regular con rangos Unicode que cubran los conjuntos Unicode ED-20, ED-21, ED-22, ED-23, ED-24 y ED-25. Como lo sugiere @JosefZ en un comentario.
Esta discusión puede ayudar a la expresión regular de JavaScript para emoji Unicode