BandaAncha

  • 🔍 en 📰 artículos ⏎
  • 🔍 en 💬 foros ⏎
  • 🔍 en 👇 este 💬 foro ⏎
  • 🔍 en 👇 este 💬 tema ⏎
Regístrate Regístrate Identifícate Identifícate

Coincidencia negativa con una palabra en una expresión regular.

BocaDePez

Hola buenas:

A ver si me podeis hechar una mano, estoy trabajando con Javascript y necesito una expresión regular que conicida con el tag strong siempre que en su interior no haya un tag de cierre span, algo como:

/[^<\/span>]{1,}<\/strong>/

Solo que en este caso al declarar un rango solo con que haya una s ya coincidirá y yo quiero que coincida con el tag entero y no se hacerlo, ¿alquien me ayuda? Gracias.

BocaDePez

siento que la ultima frase este en negrita, no me he dado cuenta y no puedo editar :( , lo siento.

🗨️ 4
LineBenchmark

Había leído conciencia negativa :P

Por lo de las negritas, no te preocupes. Solo si lo deseas, te lo edito y las quito, pero tampoco es necesario. ;)

¿Exactamente que deseas?

¿Que te muestre solo el contenido del tag mientras no haya un span? ¿O que muestre el tag y el contenido mientras no exista el span? Imagino que solo el contenido.

Aunque creo, que sabes que el cierre de span puede situarse después del cierre de strong. ¿Lo que quieres verificar, siempre cumple que el cierre de span está antes del contenido sin otro tag?

También puedes hacer pruebas en esta página.

Saludos.

🗨️ 3
BocaDePez

Me explico mejor: de el código que tengo que tratar quiero extraer un array con las etiquetas y contenido de las etiquetas strong siempre que estas no tengan un tag de cierre span en su interior, que no coincida con esto:

hola

Pero que coincida con esto:

hola

lo que hago es:

 string.match(/[^<\/span>]{1,}<\/strong>/g)

pero no es correcto porque si tengo una s o una p o un<... no me coincide porque he declarado un rango no un literal y no tengo claro como hacerlo. Ah! deve funcionar en firefox en el resto de navegadores me da igual. No se si me he esplicado bien, gracias.

🗨️ 2
BocaDePez

me ha vuelto a pasar! cuando le doy a vista previa no me sale en negrita la ultima fila.

bueno las expresiones serian (los espacios son para que no me elimine el código):

< strong>hola< /span>< /strong>
< strong>hola< span>< /strong>
 string.match(/< strong>[^<\/span>]{1,}<\/strong>/g)
🗨️ 1
djnacho

Ya te he editado la linea en negrita que no habías podido editar ;)
Un saludo :)

🗨️ 1
BocaDePez

Gracias.

Josh

Prueba con /(?!<\/span>)<\/strong>/

Mirate el Negative lookahead

(link roto)

🗨️ 3
BocaDePez

Gracias por la respuesta, pero no se por que no me funciona en firefox que es donde lo necesito.

🗨️ 2
BocaDePez

Buenas...

Efectivamente hay que hacer uso del negative lookahead. La que te dejo a continuación debería servirte:

 /* Coincide con un cadena delimitada pory  que no contenga la subcadena */

/((?!<\/span>).)*?<\/strong>/

Saludos.

🗨️ 1
BocaDePez

Se ha fastidiado un poco al postear... A ver si ahora sí (eliminar el underscore posterior al primer parentesis angular en cada tag):

 /* Coincide con un cadena delimitada por<_strong>y<_/strong> que no contenga la subcadena<_/span>)
*/

<_strong>((?!<\/span>).)*?<\/strong>

Saludos.