2011-10-30 9 views
5

Quiero buscar © en un documento HTML, y básicamente obtener la entidad a la que se atribuye el derecho de autor.seleccionar elemento de texto HTML con expresiones regulares?

La línea de autor muestra un par de maneras diferentes:

<p class="bg-copy">&copy; 2011 The New York Times Company</p> 

o

<a href="http://www.nytimes.com/ref/membercenter/help/copyright.html"> 
&copy; 2011</a> 
<a href="http://www.nytco.com/">The New York Times Company</a> 

o

<br>Published since 1996<br>Copyright &copy; CounterPunch<br> 
All rights reserved.<br> 

Quiero hacer caso omiso de las fechas y las etiquetas que intervienen y acaba de obtener "The New York Times Company" o "Counterpunch".

No he podido encontrar mucho sobre el uso de regex con JavaScript o JQuery, aunque me da la impresión de que puede ocasionar grandes dolores de cabeza. Si hay un mejor enfoque para esto, házmelo saber.

+0

No utilice expresiones regulares, en lugar utilizar el árbol DOM para encontrar lo que busca. Algunos enlaces: http://www.howtocreate.co.uk/tutorials/javascript/dombasics – FailedDev

+0

Normalmente, la respuesta que obtendrías es, por favor, no uses regex para el análisis de JS. Usa el analizador JS. La pregunta es, ¿puedes? – ZenMaster

+0

@FailedDev casi lo hizo ... – ZenMaster

Respuesta

2

Para una solución robusta, es probable que necesite una combinación de navegación DOM y algo de heurística. Sus ejemplos se pueden resolver con expresiones regulares, pero hay muchos más escenarios posibles ...

&copy;[\s\d]*(?:<\/.+?>[^>]*>)?([^<]*) 

funciona para sus tres muestras. SÓLO para ellos y casos similares.

Ver en rubular

Explicación:

&copy; // copyright symbol 
[\s\d]* // followed by spaces or digits 
(?:</.+?>[^>]*>)? // maybe followed by a closing tag and another opening one 
([^<]*) // than match anything up to the next tag 

Ver this respuesta sobre cómo utilizar en javascript con jQuery. Básicamente se puede utilizar la función de concordancia (/ expresiones regulares /):

var result = string.match(/&copy;[\s\d]*(?:<\/.+?>[^>]*>)?([^<]*)/) 
+0

gracias, veo que eso funciona, pero decidí encontrar la codificación "©" en una página y analizar ese elemento. Sin embargo, ahora estoy teniendo problemas con eso: http://stackoverflow.com/questions/8282250/jquery-contains-returns-nothing-for-html-encoding – tarayani

+0

también, ¿te importaría descomponer tu regex por mí? Realmente no lo entiendo y ¿cómo usaría esto en javascript? – tarayani

+0

Por favor, mira mi actualización. – morja

Cuestiones relacionadas