Apuntando a ECMAScript 2019 donde tenemos un soporte Unicode bastante decente. Estoy creando un visor de texto simple donde quiero informar al usuario que cierto carácter descompuesto podría convertirse en uno precompuesto. ¿Cómo puedo encontrar estos personajes?
Un ejemplo. Considere la carta a continuación. Primero tenemos la versión descompuesta, luego la precompuesta.
ä - 0061 0308 en UTF-16ä - 00E4 en UTF-16Ahora bien, mezclar estos personajes aparentemente idénticos implica algunos problemas. Cuando el usuario busca "ä" , no se encontrarán todas las ocurrencias esperadas , como lo demuestra esta expresión regular :
Aquí tenemos tres partidos. ¡Confuso! De manera similar, buscar este texto por "ä" solo daría una coincidencia.
La pregunta. Para ayudar al usuario a entender lo que está pasando, quiero resaltar cualquier carácter descompuesto que tenga una versión precompuesta adecuada. Por lo tanto, necesito encontrar el inicio y el final de estos grupos de caracteres.
¿Cómo puedo lograr esto?
Puede usar una letra + un patrón de marca diacrítica con el RegExp compatible con ECMAScript 2018+:
const re = /\p{Alphabetic}\p{M}+/ug; const matches = "ständig".matchAll(re); // With decomposed/multibyte char console.log([...matches].map(x=>[x.index, x.index+x[0].length])) // => [ [2,4] ]Aquí,
\p{Alphabetic} - coincide con cualquier letra\p{M}+ - uno o más signos diacríticos.