2009-06-06 18 views
9

Ho una stringa in JavaScript e include un tag a con un href. Voglio rimuovere tutti i collegamenti e il testo. So come rimuovere il collegamento e lasciare il testo interno, ma voglio rimuovere completamente il collegamento.Regex in Javascript per rimuovere i collegamenti

Ad esempio:

var s = "check this out <a href='http://www.google.com'>Click me</a>. cool, huh?"; 

Vorrei utilizzare un'espressione regolare in modo che mi rimane:

s = "check this out. cool, huh?"; 
+0

L'altra questione è specifico per il DOM (ad esempio, il browser, jsdom), che tale domanda è JavaScript generale. – mikemaccana

+0

@mikemaccana +1. Questa domanda riguarda la manipolazione delle stringhe piuttosto che la manipolazione DOM. Votare per deselezionare duplicato. –

+0

Per essere precisi, non ti resterebbe "controlla questo fuori, fresco, eh?" "Se stai eliminando il' a's? – Jeroen

risposta

13

questo eliminerà tutto tra <a e /a>:

mystr = "check this out <a href='http://www.google.com'>Click me</a>. cool, huh?"; 
alert(mystr.replace(/<a\b[^>]*>(.*?)<\/a>/i,"")); 

Non è davvero infallibile, ma forse lo farà il trucco per il vostro scopo ...

+2

il mio suggerimento:/] *)?>. *?<\/a>/ig – Christoph

3

regex sono fondamentalmente male a parsing del codice HTML (vedi Can you provide some examples of why it is hard to parse XML and HTML with a regex? per il motivo). Quello di cui hai bisogno è un parser HTML. Vedi Can you provide an example of parsing HTML with your favorite parser? per esempi usando una varietà di parser.

+0

Duplicato http://www.google.com/search?q=site:stackoverflow.com+%22Regexes+are+fundamentally+bad+at+parsing+HTML%22;) – Gumbo

+0

Inizia a sembrare un cliché. A volte non hai bisogno di analizzare realmente l'HTML in una struttura di dati di qualche tipo, devi solo in qualche modo manipolare quella stringa. Ci sono casi in cui RegExp ha senso. Strumento giusto per il lavoro giusto. E a proposito, John Resig ha scritto un parser HTML in JavaScript e lì ha usato alcuni RegExp. http://ejohn.org/blog/pure-javascript-html-parser/ –

+0

@Ionut G. Stan È sempre necessario analizzare l'HTML in una struttura dati perché questo è l'unico modo per lavorare in modo affidabile con esso. I regex fanno parte del parsing, ma queste domande vogliono sempre usare una regex per trovare o sostituire qualcosa. Ciò è impossibile con le regex tradizionali (come mostra uno dei link nella risposta) e molto difficili da ottenere esattamente con quelle in cui è possibile (ad esempio l'implementazione di Perl che aggiunge ricorsione). Ci sono molte librerie disponibili che svolgono già il compito di lavorare con l'HTML per te. Dovresti usarli, non una regex che è garantita fallire. –

0

Se si desidera rimuovere <a> elementi, il seguente dovrebbe funzionare bene:

s.replace(/<a [^>]+>[^<]*<\/a>/, ''); 

Questo dovrebbe funzionare per l'esempio che ha dato, ma non funziona per i tag annidati, ad esempio, si wouldn' t lavoro con questo HTML:

<a href="http://www.google.com"><em>Google</em></a> 
9

Giusto per chiarire, per eliminare i tag di collegamento e lasciare intatto tutto ciò che li separa, è un processo in due fasi: rimuovere il tag di apertura e rimuovere il tag di chiusura.

txt.replace(/<a\b[^>]*>/i,"").replace(/<\/a>/i, ""); 

campione di lavoro:

<script> 
function stripLink(txt) { 
    return txt.replace(/<a\b[^>]*>/i,"").replace(/<\/a>/i, ""); 
} 
</script> 

<p id="strip"> 
<a href="#"> 
    <em>Here's the text!</em> 
</a> 
</p> 

<p> 
<input value="Strip" type="button" onclick="alert(stripLink(document.getElementById('strip').innerHTML))"> 
</p> 
+0

@Se hai ragione, ho fatto un errore. Scusate. – mikemaccana

Problemi correlati