2009-06-06 16 views
9

Ich habe eine Zeichenfolge in JavaScript und es enthält eine a-Tag mit einer href. Ich möchte alle Links und den Text entfernen. Ich weiß, wie man den Link nur entfernt und den inneren Text verlässt, aber ich möchte den Link vollständig entfernen.Regex in Javascript, um Links zu entfernen

Zum Beispiel:

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

Ich mag würde eine Regex verwenden, so dass ich mit links bin:

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

Die andere Frage ist spezifisch für den DOM (zB Browser, jsdom), während diese Frage allgemein JavaScript ist. – mikemaccana

+0

@mikemaccana +1. Diese Frage betrifft eher die Manipulation von Zeichenfolgen als die Manipulation von DOMs. Wählen Sie, um das Duplikat zu entfernen. –

+0

Um genau zu sein, würdest du nicht mit "check this out. Cool, huh?" Verlassen, wenn du die 'a's ausziehst? – Jeroen

Antwort

13

Dies alles Streifen aus zwischen <a und /a>:

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

Es ist nicht wirklich narrensicher, aber vielleicht wird es den Trick für Ihren Zweck tun ...

+2

mein Vorschlag:/] *)?>. *?<\/a>/ig – Christoph

3

Regexes sind grundsätzlich schlecht bei der HTML-Analyse (siehe Can you provide some examples of why it is hard to parse XML and HTML with a regex? warum). Was Sie brauchen, ist ein HTML-Parser. Beispiele finden Sie unter Can you provide an example of parsing HTML with your favorite parser? mit einer Vielzahl von Parsern.

+0

Duplizieren http://www.google.com/search?q=site:stackoverflow.com+%22Regexten+sind+fundamental+bad+bei+parsing+HTML%22;) – Gumbo

+0

Das klingt wie ein Klischee. Manchmal muss man den HTML-Code nicht wirklich in irgendeine Art von Datenstruktur zerlegen, man muss diese Zeichenfolge irgendwie manipulieren. Es gibt Fälle, in denen RegExp sinnvoll ist. Das richtige Werkzeug für den richtigen Job. Und übrigens, John Resig hat einen HTML-Parser in JavaScript geschrieben und er hat etwas RegExp darin benutzt. http://ejohn.org/blog/pure-javascript-html-parser/ –

+0

@Ionut G. Stan Sie müssen immer HTML in eine Datenstruktur analysieren, weil nur so zuverlässig damit gearbeitet werden kann. Regexes sind Teil des Parsens, aber diese Fragen wollen immer einen Regex verwenden, um etwas zu finden oder zu ersetzen. Das ist unmöglich mit traditionellen Regexes (wie der eine der Links in der Antwort zeigt) und sehr schwierig, mit denen, wo es möglich ist, zurecht zu kommen (z. B. Perls Implementierung, die Rekursion hinzufügt). Es gibt viele Bibliotheken, die bereits die Arbeit mit HTML für Sie erledigen. Sie sollten sie verwenden, keine Regex, die garantiert fehlschlägt. –

0

Wenn Sie nur <a> Elemente entfernen möchten, sollten folgende gut funktionieren:

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

Dies sollte für das Beispiel arbeiten Sie gab, aber es wird nicht für verschachtelte Tags arbeiten, zum Beispiel es wouldn‘ t Arbeit mit diesem HTML:

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

Nur um zu verdeutlichen, um Link-Tags zu entfernen und alles zwischen ihnen unberührt zu lassen, ist es ein zweistufiger Prozess - entfernen Sie das öffnende Tag und entfernen Sie dann das schließende Tag.

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

Arbeits Beispiel:

<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

@Am besten hast du recht, ich habe einen Fehler gemacht. Es tut uns leid. – mikemaccana

Verwandte Themen