Hallo, lieber Forumbenutzer. Wir haben in letzter Zeit festgestellt, dass die Kommunikation via Slack viel schneller und zielführender ist als ein Beitrag im Forum. Aufgrund der neuen Möglichkeiten der Kommunikation ist das Forum ein wenig eingeschlafen und weniger Nutzer benutzen das Forum aktiv (trotzdem lohnt es sich evtl. hier nach Lösungen zu suchen oder seine Frage zu stellen).

Wir empfehlen, für deine Fragen/Probleme aktuell (zusätzlich) Slack zu nutzen. Dort sind viele kompetente Benutzer aktiv und beantworten jegliche Fragen, gerne auch von REDAXO-Anfängern! Slack wird von uns sehr intensiv und meistens "rund um die Uhr" benutzt :-)
Selbst einladen kannst Du dich hier: http://redaxo.org/slack/
Benutzeravatar
RexDude
Beiträge: 2543
Registriert: 22. Apr 2010, 11:24

[solved] RegEx Hilfe benötigt

19. Sep 2013, 13:21

Hallo,

vielleicht kann mir einer von euch bei folgendem RegEx helfen?

Aus dem String sollen folgendes enfernt werden: Leere Paragraphen-Tags, leere Paragraphen-Tags mit   sowie BRs die mehrfach hintereinander vorkommen (mit oder ohne Zeilenumbruch dazwischen). Also das hier muss alles raus (nur die 3 Ps foo/bar/batz müssen bleiben):

Code: Alles auswählen

<p></p>

<p></p>

<p>foo</p>

<p>&nbsp;</p>
<p>&nbsp;</p>

<p>bar<br />
bar</p>

<br />

<br />

<p>batz</p>

<br>
<br>
Das ganze ist für das CKEditor-Modul und sieht gerade unschönerweise und ohne die Berücksichtigung der BRs so aus: https://github.com/RexDude/ckeditor/blo ... ut.php#L19

Das RegEx sollte also mit JS laufen, aber ich glaube das ist ja eh sprachunabhängig, oder?

Danke :)
Zuletzt geändert von RexDude am 28. Sep 2013, 12:35, insgesamt 1-mal geändert.

Benutzeravatar
Xong
Beiträge: 2081
Registriert: 5. Jun 2008, 08:30
Wohnort: Halle (Saale)

Re: RegEx Hilfe benötigt

19. Sep 2013, 17:43

Hi Rudi,

versuch´s mal damit:

Code: Alles auswählen

// match all tags except lonely <br />s outside of any elements ;-(
data = data.match(/(<(?!br)(\w)[^>]*>(.*?<\/\2>)?)/igm).join("\n");
// replace empty paragraphs
data = data.replace(/(<p>(\s|&nbsp;)*<\/p>)/igm, ''); 
LG,
Xong

Bild Määääääääääääääääääääääääh!

Benutzeravatar
RexDude
Beiträge: 2543
Registriert: 22. Apr 2010, 11:24

Re: RegEx Hilfe benötigt

20. Sep 2013, 10:18

Hi Robert,

vielen Dank für deine Hilfe :) ...sogar mit lustigen Kommentaren versehen :D

Was ich gerade jetzt erste merke ist, dass der CKEditor die BRs innerhalb der Ps setzt. Deshalb scheinen deine RegExe noch nicht die richtige Wirkung zu entfalten.

Momentan ergbit diese Originalsausgabe aus dem Editor:

Code: Alles auswählen

<p>foo</p>

<p>bar</p>

<p></p>

<p><br />
<br />
batz</p>

<p>foo</p>

<p><br />
<br />
<br />
<br />
&nbsp;</p>

<p></p>

<p></p>

<p>bar</p>

<p></p>

<p>batz</p>

<p>foo</p>

<p><br />
bar<br />
batz</p>

<p></p>

<p></p>
das hier mit deinen RegExen:

Code: Alles auswählen

<p>foo</p>
<p>bar</p>
<p>
<p>foo</p>
<p>
<p>bar</p>
<p>batz</p>
<p>foo</p>
<p>
<p>foo</p>
<p>bar</p>
<p>
<p>foo</p>
<p>
<p>bar</p>
<p>batz</p>
<p>foo</p>
<p>
<p>
Das 1. batz wurde z.B. verschluckt oder auch das letzte bar und batz. Und es sind jetzt ungeschlossene Ps da :) Hast noch mal ein Update? :D

Benutzeravatar
Xong
Beiträge: 2081
Registriert: 5. Jun 2008, 08:30
Wohnort: Halle (Saale)

Re: RegEx Hilfe benötigt

20. Sep 2013, 11:29

Hi Rudi,

dein Problem kann ich nicht nachvollziehen.

Mit dieser leicht modifizierten Variante, in der ich noch die leeren <br>s wegschneide

Code: Alles auswählen

// match all tags except lonely <br />s outside of any elements ;-(
data = data.match(/(<(?!br)(\w)[^>]*>(.*?<\/\2>)?)/igm).join("\n");
// replace empty paragraphs
data = data.replace(/(<p>(\s|&nbsp;|<br\s*\/ )*<\/p>)/igm, '');
bekomme ich folgendes Ergebnis:

Code: Alles auswählen

<p>foo</p>
<p>bar</p>

<p><br />    <br />    batz</p>
<p>foo</p>



<p>bar</p>

<p>batz</p>
<p>foo</p>
<p><br />    bar<br />    batz</p>
Siehe auch http://jsfiddle.net/tDdRc/.
LG,
Xong

Bild Määääääääääääääääääääääääh!

Benutzeravatar
RexDude
Beiträge: 2543
Registriert: 22. Apr 2010, 11:24

Re: RegEx Hilfe benötigt

20. Sep 2013, 11:38

Aber hast du hier nicht noch 2 BRs in deinem Ergebnis hintereinander?

Code: Alles auswählen

<p><br />    <br />    batz</p>

Benutzeravatar
Xong
Beiträge: 2081
Registriert: 5. Jun 2008, 08:30
Wohnort: Halle (Saale)

Re: RegEx Hilfe benötigt

20. Sep 2013, 11:59

RexDude hat geschrieben:Aber hast du hier nicht noch 2 BRs in deinem Ergebnis hintereinander?

Code: Alles auswählen

<p><br />    <br />    batz</p>
Ja klar. Die können ja auch beabsichtigt sein, oder nicht?
Man könnte natürlich aufeinanderfolgende <br>s noch durch ein einziges ersetzen.
LG,
Xong

Bild Määääääääääääääääääääääääh!

Benutzeravatar
RexDude
Beiträge: 2543
Registriert: 22. Apr 2010, 11:24

Re: RegEx Hilfe benötigt

20. Sep 2013, 12:10

Ja klar. Die können ja auch beabsichtigt sein, oder nicht?
Genau das möchte ich ja vermeiden. Hatte erst kürzlich einen Redakteur, der sich hier ganz lustige Abstände zusammengebaut hat. Dabei hab ich doch ein Abstandsmodul für diesen Fall vorgesehen ;)

Mit Textile ist sowas ja auch nicht möglich für den normal User.

Benutzeravatar
RexDude
Beiträge: 2543
Registriert: 22. Apr 2010, 11:24

Re: RegEx Hilfe benötigt

20. Sep 2013, 12:25

Also prinzipiell kann man folgendes sagen: alle Paragraphen die keinen normalen Text enthalten, sonder leer sind, &nbsp; enthalten oder min. 1 BR enthalten sollen herausgefiltert werden. Dafür müsste eigentlich ein RexEx ausreichen, oder?

Benutzeravatar
Xong
Beiträge: 2081
Registriert: 5. Jun 2008, 08:30
Wohnort: Halle (Saale)

Re: RegEx Hilfe benötigt

20. Sep 2013, 12:50

RexDude hat geschrieben:Also prinzipiell kann man folgendes sagen: alle Paragraphen die keinen normalen Text enthalten, sonder leer sind, &nbsp; enthalten oder min. 1 BR enthalten sollen herausgefiltert werden. Dafür müsste eigentlich ein RexEx ausreichen, oder?
Wie gesagt, ich würde Massen-<br>s mit einzelnen austauschen. Schließlich kommt es ziemlich oft vor, dass man einzelne Zeilenumbrüche braucht (Gedichte, zweizeilige Überschriften, Fließtexte, etc.).

Ich denke das hier, wird dir gefallen:

Code: Alles auswählen

// match all tags except lonely <br />s outside of any elements ;-(
data = data.match(/(<(?!br)(\w)[^>]*>(.*?<\/\2>)?)/igm).join("\n");
// replace leading <br>s
data = data.replace(/(<(?!br)(\w)[^>]*>)(\s*<br\s*\/?>\s*)+/igm, '$1');
// replace trailing <br>s
data = data.replace(/(\s*<br\s*\/?>\s*)+(<\/(?!br)(\w)>)/igm, '$2');
// replace empty paragraphs
data = data.replace(/(<p>(\s|&nbsp;|<br\s*\/?>)*<\/p>)/igm, '');
// replace multiple <br>s with a single one
data = data.replace(/(<br\s*\/?>\s*)+/igm, '<br />');
http://jsfiddle.net/tDdRc/5/

Edit: Hab grad gemerkt, dass das Forum meinen Code verändert hat. Deshalb haben meine ersten Regexe, nicht das gewünschte Ergebnis gebracht. Hol dir den Code am besten von jsFiddle.
LG,
Xong

Bild Määääääääääääääääääääääääh!

Benutzeravatar
RexDude
Beiträge: 2543
Registriert: 22. Apr 2010, 11:24

Re: RegEx Hilfe benötigt

20. Sep 2013, 15:04

Oh ja Baby, das gefällt mir :D Ich schau später mal wie ich das in das CKEditor-Modul packe.

Danke Robert! ...der nächste Burger geht definitiv auf mich :lol:


Zurück zu „Sonstiges“