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 ANet15Amountdebe 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,ABCDefg123en loA B C Defg 123que 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
A1B2aA 1B 2y éste aA 1 B 2donde 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