regex href link-tag

RegEx para devolver el atributo ''href'' de las etiquetas ''link'' solamente?



link-tag (5)

Estoy tratando de crear una expresión regular que solo devuelve hrefs de la etiqueta <link>

¿Por qué esta expresión regular devuelve todos los hrefs incluyendo <a hrefs?

(?<=<link/s+.*?)href/s*=/s*[/'/"][^/'/"]+

<link rel="stylesheet" rev="stylesheet" href="idlecore-tidied.css?T_2_5_0_228" media="screen"> <a href="anotherurl">Slash Boxes</a>

gracias


Ya sea

/(?<=<link/b[^<>]*?)/bhref=/s*=/s*(?:"[^"]*"|''[^'']''|/S+)/

o

/<link/b[^<>]*?/b(href=/s*=/s*(?:"[^"]*"|''[^'']''|/S+))/

La principal diferencia es [^<>]*? en lugar de .*? . Esto se debe a que no desea que continúe la búsqueda en otras etiquetas.


(?<=<link/s+.*?)href/s*=/s*[/'/"][^/'/"]+

funciona con Expresso (creo que Expresso se ejecuta en .NET Regex-Engine). Incluso podría refinar esto un poco más para que coincida con el cierre '' o " :

(?<=<link/s+.*?)href/s*=/s*([/'/"])[^/'/"]+(/1)

Tal vez su motor de expresiones regulares no funciona con aserciones de búsqueda hacia atrás. Una solución alternativa sería

(?:<link/s+.*?)(href/s*=/s*([/'/"])[^/'/"]+(/2))

Tu partida estará entonces en el grupo capturado 1.


/(?<=<link/s+.*?)href/s*=/s*[/'/"][^/'/"]+[^>]*>/

estoy un poco tembloroso en la parte posterior, me refiero a mí mismo, así que lo dejé allí. Sin embargo, esta expresión regular:

/(<link/s+.*?)href/s*=/s*[/'/"][^/'/"]+[^>]*>/

... funciona en mi prueba de Javascript.


¿Qué sabor regex estás usando? Perl, por ejemplo, no admite look-behind de longitud variable. Donde sea una opción, elegiría (editado para implementar la muy buena idea de MizardX):

(?<=<link/b[^<>]*?)href/s*=/s*([''"])(?:(?!/1).)+/1

como primera aproximación. De esta forma, la elección del carácter de comillas (''o'') se igualará. Lo mismo para un idioma sin soporte para el aspecto (de longitud variable) detrás:

(?:<link/b[^<>]*?)(href/s*=/s*([''"])(?:(?!/2).)+/2)

/ 1 contendrá su coincidencia.


Evita mirar hacia atrás para un caso tan simple, solo combina lo que necesitas y captura lo que deseas obtener.

Obtuve buenos resultados con <link/s+[^>]*(href/s*=/s*([''"]).*?/2) en The Regex Coach con las opciones s y g.