Tengo una expresión regular implementada en javascript que verifica todas las letras mayúsculas en una cadena:
.match(/[AZ]+[^AZ]*|[^AZ]+/g)
luego agrega un espacio por .join(" ")
–
¿Cómo puedo escribir una expresión regular que encuentre solo la última letra mayúscula y luego se una a un espacio antes de esa letra? Gracias por tu ayuda.
—
Ejemplo de entrada: "HelloMyNameIsNick"
Resultado ideal: "HelloMyNameIs Nick"
Para agregar un espacio antes de la última letra mayúscula, haga coincidir con avidez todo seguido de una sola letra mayúscula:
"ABCabcABC".replace(/(.*)([AZ])/, "$1 $2") "ABCabcAB C"Para agregar un espacio antes de la última letra mayúscula para cada secuencia de mayúsculas, haga coincidir una letra mayúscula que no esté seguida de otra letra mayúscula:
"ABCabcAB".replaceAll(/([AZ](?![AZ]))/g, " $1") "AB CabcA B" 'HelloMyNameIsNick'.replace(/([^ \n])([AZ][^AZ]*$)/gm, '$1 $2')Casos de prueba:
console.log(` HelloMyNameIsNick Hello Hello HELLO HellO HeLLo Hello Test HELLO TEST hello test HELLO 1$@(😎-.aa HELLO 1$@(😎-.Aa `.replace(/([^ \n])([AZ][^AZ]*$)/gm, '$1 $2'))Echa un vistazo a los casos de prueba que se manejan correctamente:
Hello Hello Hello Testlo que buscas es
/[AZ](?!.*[AZ].*)/gmSolo encuentra la última letra mayúscula.
Si desea encontrar la última letra en el texto completo en lugar de cada línea, puede reemplazar m (línea múltiple) por s (línea única):
/[AZ](?!.*[AZ].*)/gs *Nota: Es posible que el indicador / /s no sea compatible con todos los navegadores.
(?!ABC) se refiere a la anticipación negativa. Comprueba las condiciones en expresión pero no las incluye en el resultado final. Más información
Utilice un cuantificador no codicioso:
/[A-Za-z]*?([AZ])[^AZ]*/Le sugiero que agregue anclas de inicio y final para asegurarse de que está haciendo coincidir toda la cadena; de lo contrario, el patrón segmentará las cadenas:
/^[A-Za-z]*?([AZ])[^AZ]*$/Pruébelo aquí: https://regex101.com/r/h9Acm6/1