RegEx stimmt mit einer Zahl am Ende einer Zeichenfolge überein

9

Ich versuche, eine Zahl am Ende eines Strings mit einer Regex zu finden. Zum Beispiel könnte die Zeichenfolge wie folgt aussehen:

%Vor%

Dies ist, was ich bisher habe, aber es scheint die gesamte Zeichenfolge zu entsprechen, wenn kein Dezimalpunkt vorhanden ist:

%Vor%

Ich meine das:

  • \-? : optionales "-" Symbol
  • \d+ : 1 oder mehr Ziffern
  • .? : optionaler Dezimalpunkt
  • \d+? : optional 1 oder mehr Nachkommastellen
  • $ : Übereinstimmung am Ende der Zeichenfolge

Was vermisse ich?

    
Phil 13.06.2013, 21:42
quelle

4 Antworten

4

. entspricht einem beliebigen Zeichen. Sie müssen es als \.

verlassen

Versuchen Sie Folgendes:

%Vor%

Das ist:

%Vor%

Wie Sie auf MDNs Regex-Seite sehen können, ist +? eine nicht-gierige Übereinstimmung von 1 oder mehr, keine optionale Übereinstimmung von 1 oder mehr.

    
nnnnnn 13.06.2013, 21:48
quelle
0

Mehrere Probleme:

  • Randnotiz : Der Bindestrich muss nicht maskiert werden; Es ist nur in Zeichenklassen speziell (z. B. [a-z] ).
  • der Punkt ist speziell; es bedeutet "Übereinstimmung mit einem beliebigen Zeichen". Du wirst es vermeiden wollen: \.
  • \d+? bedeutet eigentlich: Übereinstimmung mit mindestens einer Ziffer, aber wenn die Regex nach diesem Teil des Musters weiterläuft, versuchen Sie, die verbleibende Regex so früh wie möglich abzugleichen ("lazy "oder" nicht-gierige Übereinstimmung "). In deinem Fall macht dieses ? einfach nichts. Um diese Ziffern wirklich optional zu machen, verwenden Sie \d* .
  • Schließlich möchten Sie vielleicht den Dezimalpunkt und die nachfolgenden Ziffern als Gruppe optional machen: (\.\d+)?

Zusammenfassung: /-?\d+(\.\d+)?$/

    
Jan Krüger 13.06.2013 21:49
quelle
0

Dies sollte den Job /-?\d+\.?\d*$/

erledigen %Vor%

    
Vitim.us 13.06.2013 21:53
quelle
0

Wenn das Muster immer x*y+z ist, könntest du dies alternativ auch ohne eine Regex machen.

%Vor%

Ausgabe

%Vor%

Auf jsfiddle

    
Xotic750 13.06.2013 22:03
quelle

Tags und Links