2009-06-06 14 views
9

Mam ciąg w JavaScript i zawiera on tag a z href. Chcę usunąć wszystkie linki i tekst. Wiem, jak po prostu usunąć link i pozostawić wewnętrzny tekst, ale chcę całkowicie usunąć link.Regex w JavaScript, aby usunąć odnośniki

Na przykład:

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

Chciałbym użyć wyrażenia regularnego więc pozostaje mi:

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

Druga kwestia jest specyficzny dla DOM (np przeglądarki, jsdom), podczas gdy kwestia ta jest ogólnie JavaScript. – mikemaccana

+0

@mikemaccana +1. To pytanie dotyczy manipulacji ciągami, a nie manipulacji DOM. Głosowanie w celu anulowania oznaczenia duplikatu. –

+0

Mówiąc dokładniej, czy nie zostalibyście z "" sprawdźcie to, cool, huh? "" Jeśli usuwacie "a"? – Jeroen

Odpowiedz

13

To będzie rozebrać się wszystkiego pomiędzy <a i /a>:

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

To naprawdę nie jest niezawodny, ale być może będzie to rade dla celów ...

+2

moja sugestia:/] *)?>. *?<\/a>/ig – Christoph

3

regexes są fundamentalnie złe parsowania HTML (patrz Can you provide some examples of why it is hard to parse XML and HTML with a regex?, dlaczego). Potrzebny jest parser HTML. Zobacz przykłady Can you provide an example of parsing HTML with your favorite parser? dla przykładów korzystających z różnych analizatorów składni.

+0

Powtórz http://www.google.com/search?q=site:stackoverflow.com+%22Regexes+to+podsumowane+w+przy+pakowaniu+HTML%22;) – Gumbo

+0

To zaczyna brzmieć jak banał. Czasem nie trzeba naprawdę parsować kodu HTML do jakiejś struktury danych, po prostu trzeba jakoś manipulować tym łańcuchem. Są przypadki, gdy RegExp ma sens. Właściwe narzędzie do właściwej pracy. A tak przy okazji, John Resig napisał parser HTML w JavaScript i użył tam jakiegoś RegExpa. http://ejohn.org/blog/pure-javascript-html-parser/ –

+0

@Ionut G. Stan Zawsze trzeba parsować HTML w strukturze danych, ponieważ jest to jedyny sposób niezawodnej pracy z nim. Regeksy są częścią parsowania, ale te pytania zawsze chcą użyć jednego wyrażenia regularnego, aby znaleźć lub zastąpić coś. Nie jest to możliwe w przypadku tradycyjnych wyrażeń regularnych (jak pokazuje jedno z linków w odpowiedzi) i bardzo trudno jest je połączyć z tymi, w których jest to możliwe (np. Implementacja Perla, która dodaje rekurencję). Dostępnych jest wiele bibliotek, które już pracują z kodem HTML. Powinieneś ich używać, a nie regex, który z pewnością zawodzi. –

0

Jeśli chcesz tylko usunąć <a> elementy dodaje powinien działać dobrze:

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

To powinno działać na przykład dałeś, ale to nie będzie działać dla zagnieżdżonych znaczników, na przykład to wouldn” t praca z tym HTML:

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

Aby wyjaśnić, że w celu usunięcia tagów linków i pozostawienia wszystkiego między nimi nietkniętego, jest to proces dwuetapowy - usuń tag otwierający, a następnie usuń tag zamykający.

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

próbka robocza:

<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

@ Dopuść, że masz rację, popełniłem błąd. Przepraszam. – mikemaccana

Powiązane problemy