2011-10-30 12 views
5

Voglio cercare © in un documento HTML e fondamentalmente ottenere l'entità a cui il copyright è attribuito.seleziona l'elemento di testo HTML con regex?

La linea di diritto d'autore si presenta un paio di modi diversi:

<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> 

voglio ignorare le date e tag intermedie e solo ottenere "The New York Times Company" o "Counterpunch".

Non sono stato in grado di trovare molto sull'uso di espressioni regolari con JavaScript o JQuery, anche se ho l'impressione che possa portare a grattacapi importanti. Se c'è un approccio migliore a questo, fammi sapere.

+0

Non usare espressioni regolari, piuttosto utilizzare la struttura DOM per trovare quello che stai cercando. Alcuni link: http://www.howtocreate.co.uk/tutorials/javascript/dombasics – FailedDev

+0

Normalmente la risposta che otterresti è - per favore, non usare espressioni regolari per l'analisi di JS. Usa parser JS. La domanda è - puoi? – ZenMaster

+0

@FailedDev lo ha quasi fatto ... – ZenMaster

risposta

2

Per una soluzione robusta, sarà probabilmente necessaria una combinazione di navigazione DOM e alcune euristiche. I suoi esempi sono risolvibili con espressioni regolari, ma ci sono tanti altri scenari possibili ...

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

lavori per i vostri tre campioni. Ma SOLO per loro e casi simili.

Trova sulla rubular

Spiegazione:

&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 

Vedi this risposta su come utilizzare in JavaScript con jQuery. In pratica è possibile utilizzare la funzione match (/ regex /):

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

grazie, vedo che funziona, ma ho deciso di trovare la codifica "©" in una pagina e analizzare quell'elemento. Tuttavia, ora ho problemi con questo: http://stackoverflow.com/questions/8282250/jquery-contains-nothing-for-html-encoding – tarayani

+0

Inoltre, ti dispiacerebbe abbattere la tua regex per me? Non lo capisco davvero. e come dovrei usare questo in javascript? – tarayani

+0

Si prega di consultare il mio aggiornamento. – morja