Reguläre Ausdrücke suchen und ersetzen
Uli
- javascript
0 derletztekick0 Uli
0 Skeeve0 Uli0 seth_not@home0 Skeeve
Hallo - die Regulären Ausdrücke mal wieder :-/ ...
ich habe hier folgende Aufzählung:
"01. Beschreibung, 02. Beschreibung, 03. Beschreibung"
Diesen String möchte ich mittels Regulären Ausdrücken so umformatieren, dass jeweils das letzte Komma in der Aufzählung durch ein "und" ersetzt wird.
Wunschergebnis bei drei Elementen wäre demnach:
"01. Beschreibung, 02. Beschreibung und 03. Beschreibung"
Ich habe mir dazu folgendes Suchmuster ausgedacht: liefere mir ein Komma am Ende der Aufzählung, auf dass beliebige Zeichen folgen.
Als Regulärer Ausdruck:
reg = /,(?=.+$)/;
if (reg.test(suchstring))
suchstring = suchstring.replace(reg,' und ');
Leider erwische ich mit meinem RegExp garnix ! Wer kann mir entscheidend weiterhelfen ?
Mfg Uli
Hallo Uli,
Wer kann mir entscheidend weiterhelfen ?
Das kann ich leider nicht aber Alternativen bieten wie zB:
var str = "01. Beschreibung, 02. Beschreibung, 03. Beschreibung";
str = str.substring(0, str.lastIndexOf(",")) + " und" + str.substring(str.lastIndexOf(",")+1, str.length);
Mit freundlichem Gruß
Micha
Herzlichen Dank auf jeden Fall - Alternativen verfolge ich auch immer gerne - obwohl Reguläre Ausdrücke doch recht kompakt und "elegant"
Mfg Uli
Moin!
s/\s*,\s*(?=[^,]+$)/ und /;
Ersetzt das letzte Komma einschließlich umgebendem Whitespace durch " und ". (?=[^,]+$) ist ein look-ahead der besagt, daß kein bis zum Ende kein Komma auftreten darf.
-- Skeeve
Hallo Skeeve,
ausprobiert hab ichs noch nicht - versuche vor copy&paste immer erst, eine Sache zu durchdringen. Und da hapert es noch stellenweise:
s/\s*,\s*(?=[^,]+$)/ und /;
das einleitende s/ hab ich noch nicht verstanden
dann folgt ein whitespace, nicht oder beliebig oft wiederholt
dann folgt das gesuchte Komma
dann folgt ein whitespace, nicht oder beliebig oft wiederholt
dann - in Klammern - ein positives look-ahead, welches die Zeichenfolge nach dem gesuchten Komma definiert:
den Ausdruck in eckigen Klammern verstehe ich wieder nicht:
eine Zeichengruppe, die kein Komma enthält ???
Nach der eckigen Klammer: Zeichengruppe einmal oder beliebig oft wiederholt am Ende des Strings
Kannst Du mir ein weiteres mal auf die Sprünge helfen ?
MfG in jedem Fall
Uli
gudn tach!
s/\s*,\s*(?=[^,]+$)/ und /;
das einleitende s/ hab ich noch nicht verstanden
ist perl-syntax. beudetet in etwa das gleiche wie in javascript replace.
dann folgt ein whitespace, nicht oder beliebig oft wiederholt
genauer: mindestens null mal whitespace.
ist aber unnoetig, wenn richtige kommasetzung vorausgesetzt werden kann.
[...]
dann - in Klammern - ein positives look-ahead, welches die Zeichenfolge nach dem gesuchten Komma definiert:
den Ausdruck in eckigen Klammern verstehe ich wieder nicht:
eine Zeichengruppe, die kein Komma enthält ???
[^,] ist ein beliebiges zeichen aus der zeichenklasse, die aus allen zeichen besteht, die kein komma sind. kurz: ein "nicht-komma"
Nach der eckigen Klammer: Zeichengruppe einmal oder beliebig oft wiederholt am Ende des Strings
genauer: bis zum ende der zeile duerfen nur noch beliebig viele nicht-kommas (aber mindestens eins davon) stehen.
tsch
seth
Moin!
Und Dank Dir für die Erklärung!
das einleitende s/ hab ich noch nicht verstanden
ist perl-syntax. beudetet in etwa das gleiche wie in javascript replace.
Die Macht der Gewohnheit! Bin halt seit > 12 Jahren Perlator... ;-) und seit ca. 3 Jahren Perl Monk.
-- Skeeve