Quiero escribir una expresión regular para las siguientes cadenas para incluir todas las cadenas:
B9966 ch6258 028 chIRZ170 IRZ170 B8966A BA966C
La SALIDA debe ser la siguiente:
966 6258 028 170 170 966A BA966C
Condiciones :
Quería escribir con condiciones en expresiones regulares (es decir: (?(?condition)then|else)
) pero descubrí que javascript no admite condiciones.
Por ejemplo, la siguiente solución funciona bien, pero estoy buscando una expresión regular más profesional:
^\d+.|(?<=^\D{1}\d)\d+.|(?<=^\D{2,})\d+.
Para sus datos de ejemplo, puede eliminar una mayúscula seguida de un solo dígito o eliminar todos los que no sean dígitos.
[AZ]\d|[^\d\n]+
Demostración de expresiones regulares
const regex = /[AZ]\d|[^\d\n]+/g; [ "B9966", "ch6258", "028", "chIRZ170", "IRZ170" ].forEach(s => console.log(s.replace(regex, '')));
Editar
Para los ejemplos actualizados, puede comenzar la coincidencia con un dígito que no sea seguido de un dígito, o hacer coincidir 1+ dígitos que no sean:
\b(?:[^\d\n]\d|[^\d\n]+)
Demostración de expresiones regulares
Para no tocar el último ejemplo, puede usar una anticipación negativa:
\b(?:[^\d\n]\d|(?![AZ]{2}\d)[^\d\n]+)
Demostración de expresiones regulares
const regex = /\b(?:[^\d\n]\d|(?![AZ]{2}\d)[^\d\n]+)/; [ "B9966", "ch6258", "028", "chIRZ170", "IRZ170", "B8966A", "BA966C" ].forEach(s => console.log(s.replace(regex, '')));
Se puede usar otra expresión regular:
(?<!^\D)\d+.*
En la expresión regular anterior, se usa la búsqueda negativa, es decir, si cada carácter no comenzó con \D
antes y se compara con el carácter \d
después.
Resultado: https://regex101.com/r/Av8pEq/1