Peete: RegExpr - falsch interpretiert

Hi, habe ein bisschen mit den regulären Ausdrücken rumgespielt und komme dabei zu folgendem Ergebnis:

<script type="text/javascript" language="JavaScript">
var re1 = /[a-z]?/;
var re2 = /\d{5}/;
var re3 = /0|-?[1-9]\d*/;
document.write(re1.test("jk") + "<br />");
document.write(re2.test("123456") + "<br />");
document.write(re3.test("2jk") + "<br /><br />");

var re4 = new RegExp("\d{5}");
document.write(re4.test("12343") + "<br />");
</script>

Die Ausgabe lautet:

true
true
true

false

Hab ich die regExps falsch verstanden oder was stimmt hier nicht?
Danke für eure Hilfe,
Peete

  1. Hallo Peete,

    jo, sieht doch ganz gut aus. Bei re4 bekommst Du auch true, wenn Du RegExp("\d{5}") schreibst. re3 finde ich etwas befremdlich, weil man Alternativen eigentlich in Klammer setzt: /(0|-?)[1-9]\d*/. Ansonsten: was ist denn Dein Problem?

    Ich habe übrigens regExp für JS mal zusammengeschrieben (mit Testmöglichkeit).

    Gruß, Andreas

    --
    SELFFORUM - hier werden Sie geholfen,
    auch in Fragen zu richtiges Deutsch
    1. Danke schon mal sehr für eure Hilfe.
      Das ^..$ wird es wohl sein, hab ich ganz vergessen. Ich war etwas perplex, weil ich das direkt aus einem Buch hatte (JavaScript von GallileoPress) und da hat der Autor wohl was vergessen...
      Ich schau mir gleich die Beispiele nochmal an!

      Besten Dank
      Peete

    2. Ein sehr schönes Tutorial, super !

      Viele Grüße

  2. Hi,

    <script type="text/javascript" language="JavaScript">

    var re1 = /[a-z]?/;
    document.write(re1.test("jk") + "<br />");

    "jk" enthält wie gefordert 0 oder 1 Kleinbuchstaben ==> true

    var re2 = /\d{5}/;
    document.write(re2.test("123456") + "<br />");

    "123456" enthält 5 Ziffern ==> true

    var re3 = /0|-?[1-9]\d*/;
    document.write(re3.test("2jk") + "<br /><br />");

    Der String enthält eine Ziffer ==> true

    Willst Du Deinen Regex vielleicht am Stringanfang und -ende verankern? ^ und $ dürften helfen.

    var re4 = new RegExp("\d{5}");
    document.write(re4.test("12343") + "<br />");

    \d wird schon beim Einlesen des Strings zu _einem_ Zeichen - so wie \t zu _einem_ Zeichen (Tabulator) wird.
    Bei \d ist mir aber die Bedeutung nicht bekannt.

    "12343" enthält nicht fünfmal dieses Zeichen \d ==> false

    cu,
    Andreas

    --
    Warum nennt sich Andreas hier MudGuard?
    Schreinerei Waechter
    Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
    1. Hallo Andreas,

      "12343" enthält nicht fünfmal dieses Zeichen \d

      doch, fünmal \d, aber eben nicht fünfmal d

      ==> false

      mach \d daraus und es ergibt true.

      Gruß, Andreas

      --
      SELFFORUM - hier werden Sie geholfen,
      auch in Fragen zu richtiges Deutsch
      1. Hi,

        Hallo Andreas,

        "12343" enthält nicht fünfmal dieses Zeichen \d

        doch, fünmal \d,

        Nein, es enthält nicht 5mal das Zeichen \d.
        Zu dem Zeitpunkt, zu dem der Regex ausgewertet wird, ist weder der \ noch das d noch vorhanden.

        cu,
        Andreas

        --
        Warum nennt sich Andreas hier MudGuard?
        Schreinerei Waechter
        Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
    2. \d wird schon beim Einlesen des Strings zu _einem_ Zeichen - so wie \t zu _einem_ Zeichen (Tabulator) wird.
      Bei \d ist mir aber die Bedeutung nicht bekannt.

      Ich versteh nicht ganz was Du meinst, muss ich in RegExp alles doppelt backslashen ? \d?

      1. Hallo Peete.

        Ich versteh nicht ganz was Du meinst, muss ich in RegExp alles doppelt backslashen ? \d?

        Mein Linktipp für das allgemeine Verständnis. :)

        Gruß, Ashura

        --
        Selfcode: sh:( fo:) ch:? rl:( br:^ n4:& ie:{ mo:) va:) de:> zu:) fl:( ss:| ls:[ js:|
        Try it: Become an Opera Lover in 30 days
        Meine Browser: Opera 8.0 | Firefox 1.0.4 | Lynx 2.8.3 | Netscape 4.7 | IE 6.0
        IE Layout-Workaround №1: <!--[if IE]><style type="text/css">*{display:none;}</style><![endif]-->