Zeilenumbrüche entfernen
TomE
- javascript
Hallo,
ich lese aus meinem documentenbody per innerHTML den Inhalt aus, entferne die HTML-Tags und schreibe dann den ganzen Text in eine Variable. Leider sind in dieser lauter Zeilenumbrüche enthalten, die ich nicht wegbekomme. Habs so probiert:
txt=txt.replace(/\n/,"");
Aber er findet da nichts. Nach was muss ich suchen, damit die Zeilenumbrüche entfernt werden?
Gruß
\ ist das Escape Zeichen...
um selbst nach \ zu suchen musst du es selbst escapen: \
Also mach aus
txt=txt.replace(/\n/,"");
einfach
txt=txt.replace(/\n/,"");
dann sollte es gehen :o)
Gruß
Stefan
Hi,
txt=txt.replace(/\n/,"");
dann sollte es gehen :o)
Leider nicht :o(
Gruß
Auf welchem System arbeitest du?
Windows und Linux unterscheiden sich teilweise mit Zeilenumbrüche. Versuch mal mit \r\n anstelle von \n. Kann sein, dass das \r noch für den Wagenrücklauf dabei ist (Linux)...
Gruss
Stefan
Auf welchem System arbeitest du?
Bin auf Windows.
Windows und Linux unterscheiden sich teilweise mit Zeilenumbrüche. Versuch mal mit \r\n anstelle von \n. Kann sein, dass das \r noch für den Wagenrücklauf dabei ist (Linux)...
Geht nicht.
txt=txt.replace(/\r\n/,"");
Hab grad schon mal alle möglichen Symbole durchprobiert. Ohne Erfolg.
Gruß
Aus welcher Datei willst du denn Zeilenumbrüche entfernen?
Und von welcher Art von Zeilenumbrüchen sprechen wir, dateiweite oder im HTML? *dummfrag ;)
Gruß Stefan
Aus welcher Datei willst du denn Zeilenumbrüche entfernen?
Und von welcher Art von Zeilenumbrüchen sprechen wir, dateiweite oder im HTML? *dummfrag ;)
Also, ich lese den ganzen HTML-Inhalt innerhalb vom Body in eine Variable. In dieser entferne ich dann alle HTML-Tags, so das nur noch der nackerte Text übrigbleibt. Aber da wo vorher noch die HTML-Elemente waren (h1, p usw.) sind jetzt Zeilenumbrüche (keine Ahnung von welcher Art).
Gruß
Hi,
Also, ich lese den ganzen HTML-Inhalt innerhalb vom Body in eine Variable. In dieser entferne ich dann alle HTML-Tags, so das nur noch der nackerte Text übrigbleibt. Aber da wo vorher noch die HTML-Elemente waren (h1, p usw.) sind jetzt Zeilenumbrüche (keine Ahnung von welcher Art).
Wie entfernst Du denn die Tags? Das sollte eigentlich nicht sein.
Gruß, Cybaer
Hi,
Leider nicht :o(
Escapen und dann %0a%0d (für Windows-Dateien) durch " " ersetzen?
Gruß, Cybaer
Hi,
Escapen und dann %0a%0d (für Windows-Dateien) durch " " ersetzen?
Äh, wie? So?
txt=txt.replace(/%0a%0d/," ");
Geht nicht. Aber da kapier ich grad was nicht, oder?
Gruß
Hi,
Äh, wie? So?
Nein, vorher escapen, also maskieren!
txt=txt.replace(/%0a%0d/," ");
txt=escape(txt).replace(/%0a%0d/," ");
Und BTW: Dir ist bewußt, daß Du hier nur die erste(!), keineswegs aber alle Fundstellen ersetzt?
Gruß, Cybaer
hallo Tom,
irgendwie kriegst du zwar eine Menge gute Antworten, aber ...
ich lese aus meinem documentenbody per innerHTML den Inhalt aus, entferne die HTML-Tags
Wie machst du denn dieses "Entfernen"? Wenn erst dadurch deine Zeilenumbrüche hineingeraten, müßte dein Denkfehler doch hier zu suchen sein...
und schreibe dann den ganzen Text in eine Variable
... oder auch hier. Kannst du mal bitte die relevanten Teile deines Scripts angeben, noch _bevor_ du etwas zu ersetzen versuchst?
Leider sind in dieser lauter Zeilenumbrüche enthalten
Sind es denn wirklich "Zeilenumbrüche"? \n bedeutet strenggenommen keinen "Umbruch", wirkt aber oft so (der Unterschied zwischen Textdateien in Windows und LINUX ist dir schon genannt worden).
txt=txt.replace(/\n/,"");
Das ist prinzipiell richtig.
Aber er findet da nichts. Nach was muss ich suchen, damit die Zeilenumbrüche entfernt werden?
In http://selfhtml.teamone.de/javascript/objekte/regexp.htm#allgemeines gibt es eine kleine Liste, was mit RegExpressions in Javascript verwendet werden kann.
Grüße aus Berlin
Christoph S.
Hi Christoph,
»» Wie machst du denn dieses "Entfernen"? Wenn erst dadurch deine Zeilenumbrüche hineingeraten, müßte dein Denkfehler doch hier zu suchen sein...
und schreibe dann den ganzen Text in eine Variable
... oder auch hier. Kannst du mal bitte die relevanten Teile deines Scripts angeben, noch _bevor_ du etwas zu ersetzen versuchst?
Hier meine Funktion zum Entfernen der Tags und der Ausgabe des bereinigten Textes:
function noHtml(txt) {
var a = txt.indexOf('<');
var b = txt.indexOf('>');
len = txt.length;
var c = txt.substring(0, a);
if(b == -1) {
b = a;
}
var d = txt.substring((b + 1), len);
txt = c + d;
cont = txt.indexOf('<');
if (cont != -1) {
txt = noHtml(txt);
} else {
txt=txt.replace(/\n/,"");
alert (txt);
}
//return txt;
}
Sind es denn wirklich "Zeilenumbrüche"?
Keine Ahnung.
http://selfhtml.teamone.de/javascript/objekte/regexp.htm#allgemeines gibt es eine kleine Liste, was mit RegExpressions in Javascript verwendet werden kann.
Hab ich schon alle durchprobiert, ohne Erfolg.
Gruß Tom
Hi,
var a = txt.indexOf('<');
var b = txt.indexOf('>');
Nimm doch hier auch RegExp!
Für "simples" HTML:
replace(/(<[^>]*>)/g,"")
Und wenn ggf. Tags in den Tags sind (PHP, bei Dir wohl eher nicht, oder Tags innerhalb von Kommentaren):
String.prototype.removeTags = function() {
var s = this, r1 = /<[^<>]*(<[^<>]*>)*[^<>]*>/g;
while (s.match(r1)) s = s.replace(r1, "");
return s;
}
Gruß, Cybaer
Hi,
Für "simples" HTML:
replace(/(<[^>]*>)/g,"")
Ok, mit diesem ersetze ich praktisch meine ganze Funktion, aber die verf... Zeilenumbrüche bleiben. Es muss doch was geben, mit dem ich diese wegbekomme.
Gruß
Hi,
die verf... Zeilenumbrüche bleiben. Es muss doch was geben, mit dem ich diese wegbekomme.
Dann poste hier doch mal eine umgewandelte (und maskierte!) Testseite!
Also document.write(escape(txt)) und dann copy & paste ...
Gruß, Cybaer
PS: Und Du hast auch meinen Hinweis beachtet, daß bei deiner Ersetzung nur die erste Fundstelle ersetzt wurde?
Hi,
Dann poste hier doch mal eine umgewandelte (und maskierte!) Testseite!
Also document.write(escape(txt)) und dann copy & paste ...
%0D%0ASeite%202%0D%0ADas%20ist%20ein%20Text.%20%0D%0A%0D%0A%0D%0A
Kannst du damit was anfangen. Ähm, die Umbrüche zeigen sich, nebenbei erwähnt, auch nur in der alert-box.
PS: Und Du hast auch meinen Hinweis beachtet, daß bei deiner Ersetzung nur die erste Fundstelle ersetzt wurde?
Habe ich.
Gruß
Hi,
%0D%0ASeite%202%0D%0ADas%20ist%20ein%20Text.%20%0D%0A%0D%0A%0D%0A
Kannst du damit was anfangen.
Klar, sind Zeilenumbrüche. 8-) Und ich hatte mich wohl in der Reihenfolge vertan. Ich dachte, %0a%0d wäre ein Windows-Zeilenumbruch. :-o
Wenn also das Ersetzen von \n nicht zum Erfolg führt: Escape, ersetze die %0d%0a (*nicht* case-sensitiv!) und Unescape dann wieder - voila.
Ähm, die Umbrüche zeigen sich, nebenbei erwähnt, auch nur in der alert-box.
Klar. HTML behandelt Zeilenumbrüche als Leerzeichen.
PS: Und Du hast auch meinen Hinweis beachtet, daß bei deiner Ersetzung nur die erste Fundstelle ersetzt wurde?
Dann steht deinem Erfolg wohl nichts mehr im Wege. :)
Gruß, Cybaer
Hi,
Wenn also das Ersetzen von \n nicht zum Erfolg führt: Escape, ersetze die %0d%0a (*nicht* case-sensitiv!) und Unescape dann wieder - voila.
Habs jetzt so gemacht:
txt=txt.replace(/(<[^>]*>)/g,"");
txt=escape(txt).replace(/%0D%0A/," ");
txt=unescape(txt);
%0D%0A
mit diesem Suchstring gehts nicht, mit diesem hingegen schon %202%0D%0A . Dummerweise fehlt dann die "2" hinter "Seite". Irgendwo da drin muss der Umbruch sein, kein Zweifel %202%0D%0A. Dachte, es wär jetzt dieser %0D%0A, aber doch irgendwie nicht.
Was heißt eigentlich case-sensitiv?
Gruß
P.S. hab nicht die ganze Zeit jetzt über dem Problem gehangen :o) .
Geht.
Danke dafür, dass so einem notorischen Versager wie mir so auskunftsreich geholfen wird.
Hi,
Danke dafür, dass so einem notorischen Versager wie mir so auskunftsreich geholfen wird.
Keine Ursache - ist ja noch nie ein Meister vom Himmel gefallen! :-)
Gruß, Cybaer
Hi,
Habs jetzt so gemacht:
txt=txt.replace(/(<[^>]*>)/g,"");
txt=escape(txt).replace(/%0D%0A/," ");
txt=unescape(txt);
Was heißt eigentlich case-sensitiv?
"Groß/Kleinschreibung wird beachtet".
Und hier *muß* man sie ignorieren, da Du dich nicht drauf verlassen kannst, ob der Browser nach %0A maskiert oder nach %0a (manche so, andere so).
Und fürs Archiv: Die vollständige (und um Case-Sensivität und Suchanzahl korrigierte) All-in-One "Hau mich tot"-Codezeile, um aus einer (einfachen) HTML-Seite browserübergreifend (ab JavaScript 1.5) den Text zu ermitteln, lautet:
txt=unescape(escape(document.getElementsByTagName("body")[0].innerHTML.replace(/(<[^>]*>)/g,"")).replace(/%0D%0A/gi," "));
Gruß, Cybaer
PS: Schön kurz, und es findet bestimmt kaum ein Schw*nz auf Anhieb durch ... >;->
Hi,
Vielleicht kommt ja noch ne Antwort auf so nen alten Beitrag.
Nimm doch hier auch RegExp!
Für "simples" HTML:
replace(/(<[^>]*>)/g,"")
Ich versuch grad diese Ansammlung von Zeichen zu verstehen, und mir macht dieses etwas Schwierigkeiten:
<[^>]*>
Das heißt irgendwie, das alles zwischen < und > gefunden werden soll, oder? Aber wie das jetzt funktioniert [^>]*, dass blick ich einfach nicht. Vielleicht erklärt mir das jemand schnell? Ich möchte keinen Quellcode verwenden, den ich nicht verstehe. Das verstehen sicher eine Menge hier, denk ich mal.
Gruß
Hi,
Vielleicht erklärt mir das jemand schnell?
Du hast den selfHTML-Artikel zum RegExp-Objekt gelesen?
Du bist ferner dem dortigen Link gefolgt zu den "regulären Ausdrücken in Perl"? Dort ist die Syntax erklärt.
Und wenn dann noch Fragen sind: Googlen? Es gibt sehr gute Erläuterungen im Web ...
Gruß, Cybaer