Estaba tratando de hacer una tubería en mecanografiado que dividiría una cadena PascalCase, pero sería bueno si esto también se dividiera en dígitos. También me gustaría que se dividiera en letras mayúsculas consecutivas. Tengo esta tubería, que funciona muy bien, excepto que solo funciona en Chrome y no en Firefox, evidentemente solo Chrome admite mirar hacia atrás. ¿Cómo se puede lograr esto sin mirar atrás?
transform(value: string): string {
let extracted = '';
if (!value) {
return extracted;
}
const regExSplit = value
.split(new RegExp('(?<=[a-z])(?=[A-Z])|(?<=[A-Z])(?=[A-Z][a-z])|(?<=[0-9])(?=[A-Z][a-z])|(?<=[a-zA-Z])(?=[0-9])'));
for (let i = 0; i < regExSplit.length; i++) {
if (i !== regExSplit.length - 1) {
extracted += `${regExSplit[i]} `;
} else {
extracted += regExSplit[i];
}
}
return extracted;
}
Entonces, por ejemplo, una cadena ANet15Amount
debe transformarse en A Net 15 Amount
. Esta expresión regular anterior también dividiría una cadena camelCase, pero eso no es necesario tener en cuenta.
javascript
regex
typescript
develmatik
fuente
fuente
.replace(/([A-Z]|\d+)/g, " $1").trim();
(?!^)([A-Z]|\d+)
evita el primer espacio y no necesita recortar.Respuestas:
¿Qué tal unir con un patrón más básico como este y unir con el espacio?
Primero pensé simplemente,
[A-Z][a-z]*|\d+
pero esto se dividiría, por ejemplo,ABCDefg123
en loA B C Defg 123
que sería diferente trabajar para su función actual, que se transforma enABC Defg 123
.Todavía hay una pequeña diferencia. El suyo transforma
A1B2
aA 1B 2
y éste aA 1 B 2
donde creo que éste sería más exacto, no es así.fuente
Simplemente reemplace cualquier letra mayúscula
[A-Z]
o cualquier secuencia de dígitos\d+
con un espacio más lo que acabamos de hacer coincidir" $1"
. Omitimos la primera letra para que no se agregue espacio al comienzo de la cadena resultante agregando un aspecto negativo al comienzo de la cadena(?!^)
:Ejemplo:
Mostrar fragmento de código
fuente
Tratar
[A-Z]?[a-z]+|[A-Z]|[0-9]+
Prueba en generador: https://regex101.com/r/uBO0P5/1
fuente
Supongo que depende de las convenciones de la cadena que pueden aumentar la complejidad.
fuente