Estoy tratando de escribir una expresión regular para no permitir espacios dobles en ninguna parte de una cadena, y también forzar un solo espacio antes de un MO o GO obligatorio, sin espacio permitido al principio y al final de la cadena.
Ejemplo 1 : It is 40 GO a la derecha
Ejemplo 2 : It is 40GO incorrecto
Ejemplo 3 : It is 40 GO mal
Esto es lo que he hecho hasta ahora ^[^ ][a-zA-Z0-9 ,()]*[^;'][^ ]$ , que evita los espacios al principio y al final, y también el " ;" personaje. Este funciona a las mil maravillas.
Mi problema es no permitir espacios dobles en ninguna parte de la cadena, y también forzar espacios justo antes de los caracteres MO o GO .
Después de algunas horas de investigación, probé estos (a partir del RegExp anterior que escribí):
Para evitar los espacios dobles: ^[^ ][a-zA-Z0-9 ,()]*((?!.* {2}).+)[^;'][^ ]$
Para forzar un solo espacio antes de MO : ^[^ ][a-zA-Z0-9 ,()]*(?=\sMO)*[^;'][^ ]$
Pero ninguno de los dos últimos funciona realmente. agradeceria a quien me ayude a resolver esto
La búsqueda anticipada (?!.* {2} se puede omitir y, en su lugar, comenzar la coincidencia con un carácter que no sea un espacio en blanco y finalizar la coincidencia con un carácter que no sea un espacio en blanco y usar un solo espacio en un grupo repetido opcionalmente.
Si la cadena no puede contener un ' o ; entonces usar [^;'][^ ]$ significa que el penúltimo carácter no debe ser ninguno de esos caracteres.
Pero puede omitir esa parte, ya que la clase de carácter [a-zA-Z0-9,()] no coincide ; y '
Tenga en cuenta que el uso de una clase de caracteres como [^ ] y [^;'] en realidad espera un solo carácter, lo que hace que el patrón que intentó tenga una longitud mínima.
En su lugar, puede descartar la presencia de GO o MO precedidos por un carácter que no sea un espacio en blanco.
^(?!.*\S[MG]O\b)[a-zA-Z0-9,()]+(?: [a-zA-Z0-9,()]+)*$El patrón coincide:
^ Comienzo de cadena(?!.*\S[MG]O\b) Anticipación negativa, afirmar no un carácter que no sea un espacio en blanco seguido de MO o GO a la derecha. El límite de palabras \b evita una coincidencia parcial de palabras[a-zA-Z0-9,()]+ Comience la coincidencia con 1+ ocurrencias de cualquiera de los caracteres enumerados (Tenga en cuenta que no hay espacio en él)(?: [a-zA-Z0-9,()]+)* Opcionalmente repite la misma clase de carácter con un espacio inicial$ Fin de la cadena