Estoy tratando de hacer coincidir: --Este es un texto y <b>puede contener otras </b> etiquetas--
Envolveré el patrón coincidente con <u></u> Pero estoy tratando de evitar solo la etiqueta <br> . Es decir, no debería coincidir si la cadena tiene <br> en el medio --
text.replace(/(?:--)(?:(?!--|\s))((?!<br>).*?)(?:--)/g,'<u>$1</u>')Desafortunadamente, mis coincidencias de expresiones regulares
--Este es un texto, <b>puede contener otras</b>etiquetas pero no coinciden si <br> está presente--
No espero que coincida ya que <br> está presente.
Hacer (?!<br>). como grupo, luego cuantifique este grupo, en lugar de cuantificar . solamente. También, ? es redundante después de * porque ? significa 0 o 1 mientras que * significa 0 o más, que ya cubren 1.
(?:--)(?:(?!--|\s))((?:(?!<br>).)*)(?:--) Bonificación: no necesita un grupo de captura si usa una mirada positiva hacia adelante y una mirada positiva hacia atrás para -- , si su entorno lo admite. Esta coincidencia en sí misma excluirá el -- .
(?<=--)(?:(?!--|\s))(?:(?!<br>).)*(?=--)Primero verifique si la cadena no contiene <br> y luego continúe con la expresión regular:
if (!/--.*?<br>.*?--/.test(text)) { text.replace(/(?:--)(?:(?!--|\s))((?!<br>).*?)(?:--)/g,'<u>$1</u>') }