en nodejs, tengo que seguir el patrón
(/^(>|<|>=|<=|!=|%)?[a-z0-9 ]+?(%)*$/ipara hacer coincidir solo cadenas alfanuméricas, con sufijo y prefijo opcionales con algunos caracteres especiales. Y está funcionando bien.
Ahora quiero hacer coincidir el último '%' solo si el primer carácter es alfanumérico (no distingue entre mayúsculas y minúsculas) o también un %. Entonces está permitido opcionalmente, de lo contrario no debería coincidir.
Ejemplo:
Debe coincidir:
>test !=test <test >=test <=test %test test %test% test%Ejemplo que no debe coincidir:
<test% <-- its now matching, which is not correct <test< <-- its now **not** matching, which is correct¿Algunas ideas?
Puede agregar una anticipación negativa después de ^ como
/^(?![^az\d%].*%$)(?:[><]=?|!=|%)?[az\d ]+%*$/i ^^^^^^^^^^^^^^^^^Vea la demostración de expresiones regulares . Detalles :
^ - comienzo de la cadena(?![^az\d%].*%$) : falla la coincidencia si hay un carácter que no sea alfanumérico o % al principio y % al final(?:[><]=?|!=|%)? - Opcionalmente, haga coincidir < , > , <= , >= , != o %[az\d ]+ - uno o más caracteres alfanuméricos o de espacio%* - cero o más % caracteres$ - final de la cadenaPuede usar una alternancia | para que coincida con cualquiera de las opciones.
^(?:[a-z0-9%](?:[a-z0-9 ]*%)?|(?:[<>]=?|!=|%)?[a-z0-9 ]+)$^ Comienzo de cadena(?: grupo de no captura[a-z0-9%] Coincide con uno de los enumerados en la clase de caracteres(?:[a-z0-9 ]*%)? Opcionalmente, coincida repitiendo 0+ veces cualquiera de la clase de carácter seguido de %| O(?:[<>]=?|!=|%)? Opcionalmente emparejar una de las alternativas[a-z0-9 ]+ Match 1+ veces cualquiera de la clase de caracteres) Cerrar grupo de no captura$ Fin de la cadena