JensB: Suchsyntax in Regulären Ausdruck umwandeln?

Hallo,

ich bau mir gerade eine Suchfunktion für meine Webseite (in Javascript), und habe mir dafür ein Array von Seiten-Objekten erstellt (ein Seitenobjekt besteht aus dem Titel der Seite, der URL und einer Beschreibung).

Jetzt gibt der Suchende einen Begriff ein, der dann als regulärer Ausdruck interpretiert wird; eine for-Schleife geht das gesamte Seiten-Objekt-Array durch, und schaut immer, ob ausdruck.test(Seite[i].Titel) || ausdruck.test(Seite[i].URL) || (ausdruck.test(Seite[i].Beschreibung) == true

Ich dachte mir, das ist bestimmt ganz nett, da diese regulären Ausdrücke ein recht machtvolles Werkzeug sind.

ABER: Aus Suchanfragen kennt man ja, wenn man nach Hau* sucht, werden Wörter wie "Hausmeister", "haus", etc. gefunden. Bei den regulären Ausdrücken bedeutet das * aber etwas anderes, da würde auch "haudrauf" gefunden... Und das könnte den Besucher ja verwirren.

Lange Rede, kurzer Sinn: Gibt es eine überschaubare Lösung, wie ich die aus dem WWW bekannte Suchmaschinen-Syntax in einen regulären Ausdruck umwandeln kann?

Viele Grüße,
Jens

  1. ABER: Aus Suchanfragen kennt man ja, wenn man nach Hau* sucht, werden Wörter wie "Hausmeister", "haus", etc. gefunden. Bei den regulären Ausdrücken bedeutet das * aber etwas anderes, da würde auch "haudrauf" gefunden... Und das könnte den Besucher ja verwirren.

    //EDIT:

    War ein falsches Beispiel, ich muss mich korrigieren. "haudrauf" würde natürlich auch gefunden. Aber der reguläre Ausdruck /hau*/ würde zum Beispiel auch auf "Hase" zutreffen. Und das ist das Problem.

    1. Hi,

      "haudrauf" würde natürlich auch gefunden. Aber der reguläre Ausdruck /hau*/ würde zum Beispiel auch auf "Hase" zutreffen. Und das ist das Problem.

      Na dann lass nach hau suchen, gefolgt von beliebig vielen beliebigen (Wort-)Zeichen.

      MfG ChrisB

      --
      “Whoever best describes the problem is the person most likely to solve the problem.” [Dan Roam]
      1. Na dann lass nach hau suchen, gefolgt von beliebig vielen beliebigen (Wort-)Zeichen.

        MfG ChrisB

        Danke für deine Antwort, aber ich glaube, du hast mein Problem nicht verstanden: Ich selber weiß ja, dass ich einen regulären Ausdruck da eingeben kann, aber ich will die Suche ja benutzerfreundlich gestalten, daher möchte ich die Suchsyntax in einen regulären Ausdruck übersetzen.

        1. @@JensB:

          nuqneH

          daher möchte ich die Suchsyntax in einen regulären Ausdruck übersetzen.

          Also '*' durch '.+' ersetzen?

          Qapla'

          --
          Volumen einer Pizza mit Radius z und Dicke a: pi z z a
          1. Hallo,

            daher möchte ich die Suchsyntax in einen regulären Ausdruck übersetzen.
            Also '*' durch '.+' ersetzen?

            oder durch '.*', je nachdem wie man es für richtig hält. In einigen Implementierungen findet man mit "hau*" auch den Eintrag "hau".

            So long,
             Martin

            --
            Frage an Radio Eriwan: Kann man eigentlich ein guter Kommunist und gleichzeitig ein guter Christ sein?
            Radio Eriwan antwortet: Im Prinzip ja - aber warum sollte man sich das Leben doppelt schwer machen?
            1. Also '*' durch '.+' ersetzen?

              oder durch '.*', je nachdem wie man es für richtig hält. In einigen Implementierungen findet man mit "hau*" auch den Eintrag "hau".

              Ich danke für die Ideen :-)

              Aber ein ? ist ja in Suchsyntax ein Platzhalter für ein spezielles Zeichen, wie mache ich das noch mit dem reg. Ausdruck?

              1. @@JensB:

                nuqneH

                Aber ein ? ist ja in Suchsyntax ein Platzhalter für ein spezielles Zeichen, wie mache ich das noch mit dem reg. Ausdruck?

                Willst du jetzt jede Kleinigkeit hier fragen oder doch erstmal nachlesen?

                http://de.selfhtml.org/javascript/objekte/regexp.htm, http://de.selfhtml.org/perl/sprache/regexpr.htm

                Qapla'

                --
                Volumen einer Pizza mit Radius z und Dicke a: pi z z a