Uli: Reguläre Ausdrücke suchen und ersetzen

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

  1. 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

    --
    LeagueEditor JavaScript kostenlose Ligaverwaltung || richtig Messen will gelernt sein
    1. Herzlichen Dank auf jeden Fall - Alternativen verfolge ich auch immer gerne - obwohl Reguläre Ausdrücke doch recht kompakt und "elegant"

      • aber entsprechend schwierig - sind.

      Mfg Uli

  2. 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

    1. 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

      1. 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

        1. 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