Aquí hay un ejemplo de lo que estoy tratando de hacer coincidir:
Match everything after this::: one two three Match this also::: one two three ___ but not thisMi código:
const thing = /[^:]:::\n([\s\S]*)(_{3}|$)/gmQuiero que coincida con todo DESPUÉS de ':::', pero que termine cuando vea ___, o si eso no está allí, entonces el final de la entrada de texto, $.
Funciona para el PRIMER ejemplo, pero sigue coincidiendo con el texto después de ___ en el segundo ejemplo.
¿Alguna idea de cómo hacer esto bien?
Sólo estoy interesado en los resultados en la primera agrupación. Tuve que agrupar (_{3}|$) de lo contrario, crea un bucle infinito.
El patrón [^:]:::\n([\s\S]*)(_{3}|$) que probaste coincide demasiado porque [\s\S]* coincidirá hasta el final . Luego, cuando al final de la cadena, hay una alternancia (_{3}|$) coincide con 3 veces un guión bajo o el final de la cadena.
Luego, el patrón puede establecerse haciendo coincidir el final de la cadena.
Puede usar un grupo de captura y hacer coincidir todas las líneas siguientes que no comienzan con ___
[^:](:::(?:\n(?!___).*)*)[^:] Coincide con cualquier carácter excepto :( Grupo de captura 1::: Coincidir literalmente(?:\n(?!___).*)* Coincide con todas las líneas consecutivas que no comienzan con ___) Cerrar grupo 1Demostración de expresiones regulares
O con una mirada negativa hacia atrás si se admite para obtener solo una coincidencia, afirmando que no : a la izquierda
(?<!:):::(?:\n(?!___).*)*