Quiero unir instancias de ' el sustantivo bla, bla ' a lo largo de un texto, donde el bla, bla puede incluir muchas palabras, pero NO 'el'.
Esta expresión regular:
/(\b([Tt]he|[Aa]n|[Aa]|[Aa]nother)\b)?((?!\b(the|an?|another)\b).)*\b(cat|apple)\b/gProduce estos fósforos: El pequeño gato se sentó sobre un enorme gato negro y se comió una manzana .
Probé algunas expresiones regulares aquí: https://regexr.com/674l6
La coincidencia funciona, pero no puedo capturar coincidencias completas. Cuando pasa el cursor sobre las coincidencias en regexr, no todos los grupos de captura están disponibles. Solo puedo capturar el principio y el final de la cadena coincidente.
Hay una demostración básica aquí .
He estado ajustando la expresión regular durante horas, pero fue en vano.
Para los caracteres en el medio, solo tiene una coincidencia para el último carácter individual en un grupo de captura, ya que está repitiendo el grupo de captura.
Puede agregar un grupo de captura alrededor del todo que está emparejando y convertir el grupo de captura repetitivo en un grupo de no captura.
Como desea hacer coincidir el sustantivo bla, bla , el primer grupo de captura no debe ser opcional.
El partido ahora tiene 3 grupos de captura en lugar de 5.
\b([Tt]he|[Aa]n(?:other)?|[Aa])\b((?:(?!\b(?:the|an?|another)\b).)*)\b(cat|apple)\bEl patrón actualizado en partes:
\b Un límite de palabra para evitar una coincidencia parcial( Grupo de captura 1[Tt]he|[Aa]n(?:other)?|[Aa] Coincide con una de las alternativas) Cerrar grupo 1\b Un límite de palabra( Grupo de captura 2(?:(?!\b(?:the|an?|another)\b).)* Repita la coincidencia de cualquier carácter que no esté seguido directamente por ninguna de las alternativas (token codicioso moderado)) Cerrar grupo 2\b(cat|apple)\b Captura el grupo 3 , haz coincidir gato o manzana entre los límites de las palabrasDemostración de expresiones regulares
Vea una versión de patrón no codicioso para no capturar los espacios circundantes en el grupo 2.