Así que tengo dos expresiones regulares diferentes para códigos postales de dos países diferentes. Uno es Holanda y el otro es Bélgica.
Los países bajos:
.match(/^[1-9][0-9]{3} ?(?!sa|sd|ss)[A-Za-z]{2}$/g)Bélgica:
.match(/^[1-9]{1}\d{3}$/g)El usuario puede ingresar un código postal holandés o un código postal de Bélgica. Entonces, por ejemplo, el usuario puede ingresar: 1111 AA (Países Bajos) o 1111 (Bélgica). Sin embargo, quiero que la expresión regular permita una de las dos entradas, pero no puedo hacer que funcione
Esto es lo que he probado hasta ahora:
.match(/^(?:[1-9]{1}\d{3}) | ([1-9][0-9]{3} ?(?!sa|sd|ss)[A-Za-z]{2}$)/g)Pero simplemente estropea toda la expresión regular y no permite ninguno de los 2 códigos postales. ¿Estoy haciendo un mal uso del operador OR?
Parece que ha puesto por error un carácter de espacio inicial/posterior alrededor de la alternancia. Sin embargo, parece que puede eliminar la alternancia por completo y usar un grupo opcional sin captura:
^[1-9]\d{3}(?: ?(?!s[ads])[AZ]{2})?$Ver una demostración en línea
^ - Anclaje de la línea de salida;[1-9]\d{3} - Un dígito que va del 1 al 9 seguido de otros tres dígitos;(?: - Grupo abierto sin captura;?(?!s[ads]) : un espacio opcional seguido de una anticipación negativa para afirmar la posición no va seguido de ninguna combinación de una 's' con 'anuncios';[AZ]{2} - Dos alpa-chars;)? - Cierre el grupo de no captura y hágalo opcional;$ - Anclaje de línea final.Tenga en cuenta que coincidí con esto sin distinción entre mayúsculas y minúsculas.