suit: Regex zur Suche nach Vorkommen einer Zahl in String

Beitrag lesen

NEIN! Das ist NICHT a/k/a!

\d ist nicht dasselbe wie [0-9] (\d matcht alle Dezimal-Ziffern, nicht nur die ASCII-Dezimal-Ziffern, also z.B. auch die bengalischen ab \u09E6)
(oder ist das in Javascript anders als in Perl?).

Das kommt auf die Implementierung der PCRE-Engine an - allein die Unterschiede bei \w sind zwischen den Implementierungen schon stark unterschiedlich - ich weiß zwar nicht, wie es hier um JavaScript bestellt ist, aber eine Pauschalaussage kann man sicher nicht treffen.

Abgesehen davon: Warum packst Du \d in eine Zeichenklasse? \d matcht schon ganz alleine Ziffern.

Das hat mich auch gewundert.

Und warum {3,} statt 3?

Weil {3,} etwas anderes als {3} ist - in diesem Fall ist es, da der Ausdruck hier zu Ende ist, völlig egal.

Wenn mehr als drei aufeinanderfolgende Ziffern im String enthalten sind, findet \d{3} die ersten 3 davon. test() findet also den Treffer, mit Negierung wird dieser String dann also von domeb als unpassend aussortiert.
Da es hier ja gar nicht um den Suchtreffer-String (welcher Teil des Strings wurde gematcht) geht, sondern nur darum, *ob* 3 (oder mehr) aufeinanderfolgende Ziffern vorhanden sind, ist {3} ausreichend. Und ggf. deutlich effizienter. Stell Dir vor, der String hätte ein paar Tausend aufeinanderfolgende Ziffern - mit {3} kann nach 3 Ziffern abgebrochen werden. Mit {3,} müssen alle Ziffern aufgesammelt werden (um ggf. später den getroffenen String weiterzubearbeiten) ...

Wenn die Ziffern z.B. durch Whitespace-Zeichen begrenzt sind, sist \s\d{3,}\s etwas völlig anderes als \s\d{3}\s