Tengo un requisito donde necesito una expresión regular que
ejemplo :-
A,B --- correct A,B,C,D,E,F --- correct D,D,A --- wrong ,B,C --- wrong B,C, --- wrong A,,B,C --- wrongAlguien puede ayudar ?
Otra idea con la captura y verificación mediante el uso de una búsqueda anticipada :
^(?:([AZ])(?!.*?\1),?\b)+$Puede probar aquí en regex101 si cumple con sus requisitos.
Si no desea hacer coincidir caracteres individuales, por ejemplo, A , cambie el cuantificador + a {2,} .
El enunciado de la pregunta es incompleto en varios aspectos. He hecho las siguientes suposiciones:
D,D,A es incorrecto, asumo que una letra no puede ir seguida de una coma seguida de la misma letra.A,,B,C es incorrecto, supongo que una coma no puede seguir a una coma.i ) para permitir cualquiera de los casos).Observamos que los requisitos se cumplen si y solo si la cadena comienza con una letra mayúscula y va seguida de una secuencia de pares de letras mayúsculas y comas, siempre que ninguna letra mayúscula vaya seguida de una coma seguida de la misma letra. Por lo tanto, podemos intentar hacer coincidir la siguiente expresión regular.
^(?:([AZ]),(?!\1))*[AZ]$Los elementos de la expresión son los siguientes.
^ # match beginning of string (?: # begin a non-capture group ([AZ]) # match a capital letter and save to capture group 1 , # match a comma (?!\1) # use negative lookahead to assert next character is not equal # to the content of capture group 1 )* # end non-capture group and execute it zero or more times [AZ] # match a capital letter $ # match end of stringAquí hay una gran solución de expresiones regulares feas:
var inputs = ['A,B', 'D,D,D', ',B,C', 'B,C,', 'A,,B']; for (var i=0; i < inputs.length; ++i) { if (/^(?!.*?([^,]+).*,\1(?:,|$))[^,]+(?:,[^,]+)*$/.test(inputs[i])) { console.log(inputs[i] + " => VALID"); } else { console.log(inputs[i] + " => INVALID"); } }La expresión regular tiene dos partes. Utiliza una anticipación negativa para afirmar que nunca se repiten dos entradas CSV en la entrada. Luego, utiliza un patrón sencillo para hacer coincidir cualquier entrada delimitada de CSV adecuada. Aquí hay una explicación:
^ from the start of the input (?!.*?([^,]+).*,\1(?:,|$)) assert that no CSV element ever repeats [^,]+ then match a CSV element (?:,[^,]+)* followed by comma and another element, 0 or more times $ end of the input