La solución es simple: utilizar búsqueda negativa hacia delante:
(?!.*abc$)
Esta afirma que la cadena no termina con abc
.
Mencionó que también necesita que la cadena termine con [abcde]*
, pero *
significa que es opcional, por lo que xxx
coincide. Supongo que realmente quiere [abcde]+
, que también significa que debe terminar con [abcde]
. En ese caso, las afirmaciones son:
(?=.*[abcde]$)(?!.*abc$)
Ver regular-expressions.info de tutoriales sobre lookarounds positivos y negativos.
yo era reacio a dar a la expresión regular real Javascript ya que no estoy familiarizado con el lenguaje (aunque estaba seguro de que las afirmaciones, si es compatible, trabajarían - según regular-expressions.info, Javascript apoya positivo y negativo mirar hacia el futuro).Gracias a puntiagudas y los comentarios de Alan Moore, yo creo la expresión regular correcta Javascript es la siguiente:
var regex = /^(?!.*abc$).*[abcde]$/;
Tenga en cuenta que esta versión (con abono a Alan Moore) ya no necesita la búsqueda positiva hacia delante. Simplemente coincide con .*[abcde]$
, pero primero afirmando ^(?!.*abc$)
.
En caso de '[abcde] *' 'realmente [abcde] +'? De lo contrario 'xxx' coincide perfectamente. – polygenelubricants