En un archivo de varias líneas, quiero verificar que todas las líneas coincidan con uno o más patrones complejos (que pueden cubrir varias líneas cada uno).
Puedo hacer que esto funcione bien con este RegEx
\A(patternA\n|patternB\n)*\z (Para algunos idiomas funciona con \Z en lugar de \z )
Coincidirá:
patternA patternB patternAy rechazará
patternA patternC patternB Pero no funciona en JavaScript (donde necesito ejecutar la prueba) porque JavaScript RegEx aparentemente no admite los anclajes \A (inicio de archivo) o \z (fin de archivo). Y si esos anclajes se dejan, obtengo un conjunto de coincidencias (la primera y la tercera línea en mi segundo ejemplo anterior), sin la información de que también hay no coincidencias.
Por el momento, lo único que se me ocurre es ejecutar la verificación RegEx sin esos dos anclajes y luego verificar que la suma de la longitud de todas las coincidencias sea igual a la longitud del texto general, pero esto parece bastante torpe.
¿Existe una forma simple/elegante de implementar esta verificación en JavaScript RegEx?
Ahora creo que la mejor solución puede ser invertir la lógica para que busque cualquier cosa que no coincida con los patrones requeridos y pase la verificación si no se encuentra ninguna coincidencia. El siguiente RegEx, que se ejecuta bajo JavaScript, por ejemplo, coincide con el segundo ejemplo de mi publicación original y no con el primero:
^(?!patternA$|patternB$|$) Se necesita la última opción ( $ ) ya que, de lo contrario, siempre coincide con la línea (vacía) que sigue a la última nueva línea.
Si los patrones individuales son complejos, puede ser más fácil para el motor de expresiones regulares y más simple de entender escribir código imperativo que recorra cada una de las líneas y verifique cada uno de los patrones en orden.
Esto permitirá que cada uno de los patrones permanezca en una expresión regular. No es necesario incluirlos en el patrón de "archivo completo" cuando se actualiza, agrega o elimina uno. Los diferentes patrones también pueden usar diferentes banderas de expresiones regulares y así sucesivamente.