kidchino: Ab einer bestimmten Stelle ersetzen

Hi zusammen,
ich  bin neu hier und habe leider auch nicht viel Ahnung von JS.
Trotzdem benötige ich es gerade :)

Aber habe verschiedene Suchstrings, die unterschiedlich lang sind. Immer in etwa so:
(nike int SAME USA NOT nikey NOT liky).
Einfach verschiedene Wörter. Ich möchte nun diese String so kürzen, dass immer alles ab dem ersten NOT gelöscht wird.
Also aus
nike int SAME USA NOT nikey NOT liky
soll dann
nike int SAME USA
werden.

Jemand ne Idee?
tmp2 = tmp2.replace(/\NOT/i,"");
So würde ich es versuchen, aber ich weiß halt nicht wie ich den Rest dannach lösche.

VG
kidchino

  1. Hallo,

    Jemand ne Idee?
    tmp2 = tmp2.replace(/\NOT/i,"");
    So würde ich es versuchen, aber ich weiß halt nicht wie ich den Rest dannach lösche.

    Ich würde sowas probieren:

    tmp2 = tmp2.replace(/NOT.*/i,"");

    . = beliebiges Zeichen
    * = beliebig viele

    Alternative (hab ich mnicht probiert, müsste aber auch gehen):

    tmp2 = tmp2.substr(0, tmp2.indexOf("NOT"));

    (funktioniert allerdings nur, wenn SICHER ein NOT vorkommt, also ist der replace-Ansatz vermutlich besser ;))

    Viele Grüße,
    Jörg

    1. Hey,

      danke für die schnelle Antwort.

      tmp2 = tmp2.replace(/NOT.*/i,"");

      So klappt es ziemlich gut. Leider noch eine Frage:

      Vor dem NOT ist auch noch ein Leerzeichen. Bekomme ich das auch noch weg?

      LG
      und schon jetzt supr vielen Danke.
      Kid

      1. @@kidchino:

        nuqneH

        Vor dem NOT ist auch noch ein Leerzeichen. Bekomme ich das auch noch weg?

        Ja.

        Hier zeigt sich (mal wieder), dass es nicht das Beste ist, mit fertigem Code zu antworten, sondern Hilfe anzubieten, dass sich der Fragende den Code selber schreiben kann. Das heißt, dass er den Code auch *versteht*.

        Qapla'

        --
        „Talente finden Lösungen, Genies entdecken Probleme.“ (Hans Krailsheimer)
        1. Danke. Ist natürlich klar ;)
          tmp2 = tmp2.replace(/.NOT.*/i,"");

          Danke für die Hilfe.

          Tatsächlich hätte ich auch noch eine andere Frage, die ich nicht alleine hinbekomme, die aber auch ein bisschen schwieriger ist.
          Dazu müsste ich aber ein bisschen ausholen?

          VG
          kid

          1. Hi nutze ein Script. Hier wird ein Suchstring per Hand eingegeben.
            Das Script packt die einzelen Suchstrings dann in ein Array (getrennt durch ein ","). Und sucht danach auf einer Homepage. Die Ergebnisse werden extrahiert und dann mit dem "name" gespeichert. Je eine Datei für einen geklammerten Suchstring.

            So sieht das Skript aus:

            //imacros-js:showsteps no  
              
            var ret, start, i, str, subnr, part, limit;  
              
            limit = 500;  
            start = 1;  
            part = 0;  
            index = "EXT";  
              
            str = prompt("Suchstring","");  
            //str = "(amer* int* grp*),(aig financial),(lexington insurance),(mt mansfield NOT Mt Mansfield Union)";  
            search = str.split(",");  
            subnr = prompt("Index="+index+", BvdID?","");  
              
              
            for (var i=start; i<=max; i++) {  
                      ++part;  
              
              
            var tmp2 =null;  
              
            tmp2=search[j];  
              
            tmp2 = tmp2.replace(/\n/,"");  
            tmp2 = tmp2.replace(/.NOT.*/i,"");  
            tmp2 = tmp2.replace(/\*/g,"");  
            tmp2 = tmp2.replace("(","");  
            tmp2 = tmp2.replace(")","");  
            tmp2 = tmp2.replace(/\s/g,"_");  
              
            name = subnr+"#"+part+"##"+tmp2;
            

            Das Problem ist, dass ich den Suchstring nicht einlesen kann wie in der ausgeklammerte Zeile (//str = "(amer* int* ...) angegeben sondern so:

            "(amer* int* grp*),
            (aig financial),
            (lexington insurance),
            (mt mansfield NOT Mt Mansfield Union)"

            Also mit Zeilenumbrüchen. Genau die stören aber beim Schreiben des Dateinames. Den es entsteht immer ein Leerzeichen nach dem "##" (erst ab Datei 2, also ab dem ersten Zeilenumbruch), und wenn wirklich ein "NOT" kommt, dann wird die Datei mit gleichem Namen zweimal gespeichert und diese ist dann nur in der Eingabeaufforderung und auch nur mit dem 8.3dos Namen löschbar.

            Die Fehler hab ich nicht, wenn ich es so einlesen würde:
            "(amer* int* grp*),(aig financial),(lexington insurance),(mt mansfield NOT Mt Mansfield Union)".

            Hier jemand eine Idee?

            VG

          2. @@kidchino:

            nuqneH

            tmp2 = tmp2.replace(/.NOT.*/i,"");

            Wolltest du nicht nach einem (oder auch mehreren?) Leerzeichen vor 'NOT' suchen? Mit '.' suchst du nach einem beliebigen Zeichen. Der Ausdruck wird auch fündig bei 'RIESENOTTER…' und macht daraus 'RIES'.

            Und nach ' NOT' sollte auch ein Leerzeichen stehen, sonst fällt auch ' NOTAR' und alles, was danach steht, weg.

            Qapla'

            --
            „Talente finden Lösungen, Genies entdecken Probleme.“ (Hans Krailsheimer)
            1. @@kidchino:

              nuqneH

              tmp2 = tmp2.replace(/.NOT.*/i,"");

              Wolltest du nicht nach einem (oder auch mehreren?) Leerzeichen vor 'NOT' suchen? Mit '.' suchst du nach einem beliebigen Zeichen. Der Ausdruck wird auch fündig bei 'RIESENOTTER…' und macht daraus 'RIES'.

              Und nach ' NOT' sollte auch ein Leerzeichen stehen, sonst fällt auch ' NOTAR' und alles, was danach steht, weg.

              Qapla'

              Super Hinweis. Macht natürlich Sinn. Aber die Verkettung als regulären Ausdrücken ist ja genau meins;) Ich versuche mal. Danke für die Tipp

            2. Gibts denn ne Seite wo man JS gut testen kann?

              Bei http://codepad.org/ geht ja kein JAVA.

              VG

              1. Mahlzeit,

                Gibts denn ne Seite wo man JS gut testen kann?

                JSFiddle

                Bei http://codepad.org/ geht ja kein JAVA.

                Java != Javascript. Der Unterschied ist, dass es völlig unterschiedliche Sprachen sind.

                --
                42
                1. @@M.:

                  nuqneH

                  Java != Javascript.

                  Das heißt? ;-)

                  Qapla'

                  --
                  „Talente finden Lösungen, Genies entdecken Probleme.“ (Hans Krailsheimer)
                  1. Mahlzeit,

                    Das heißt? ;-)

                    Da != in Java und in Javascript existiert, hatte ich bisher angenommen, ich kann dieses Wissen vorraussetzen ;)

                    --
                    42
              2. @@kidchino:

                nuqneH

                Gibts denn ne Seite wo man JS gut testen kann?

                Für reguläre Ausdrücke: http://leaverou.github.io/regexplained/

                Bei http://codepad.org/ geht ja kein JAVA.

                Macht auch nichts.

                Qapla'

                --
                „Talente finden Lösungen, Genies entdecken Probleme.“ (Hans Krailsheimer)
            3. Hi,

              tmp2 = tmp2.replace(/\bNOT\b.*/i,"");

              So hätte ichs gedacht, aber auch dass für zu Fehlern

              1. @@kidchino:

                nuqneH

                tmp2 = tmp2.replace(/\bNOT\b.*/i,"");

                So hätte ichs gedacht, aber auch dass für zu Fehlern

                Wieso '\b'? Du willst doch das (die?) Leerzeichen vor 'NOT' auch weghaben.

                Also '\s' oder ' ', gern auch mit '+' dahinter.

                aber auch dass für zu Fehlern

                '\b' ist in JavaScript auch (noch) dumm implementiert. Nicht-ASCII-Buchstaben wie deutsche Umlaute werden auch als Wortgrenze (v)erkannt.

                Qapla'

                --
                „Talente finden Lösungen, Genies entdecken Probleme.“ (Hans Krailsheimer)
                1. @@Gunnar Bittersmann:

                  nuqneH

                  '\b' ist in JavaScript auch (noch) dumm implementiert.

                  “The whole mess comes from IT being developed for a great part by native English speakers blind for the needs of other languages.” —me

                  Qapla'

                  --
                  „Talente finden Lösungen, Genies entdecken Probleme.“ (Hans Krailsheimer)
                2. Also '\s' oder ' ', gern auch mit '+' dahinter.

                  tmp2 = tmp2.replace(/\s+/NOT\s+/.*/i,"");

                  So geht es natürlich auch nicht...und ich weiß auch nicht weiter.
                  /\s+  /NOT/ s+ .* i
                  Ich bekomme es einfach nicht zusammengebaut.
                  Gibts dann dafü nicht einfach nen Regel? Immer ein / am Anfang oder ein ?

                  VG

                  1. Also mal ganz langsam

                    / immer an Anfang

                    \s+ das sind ein oder mehrere Lee(h)rzeichen.

                    Also

                    /\s+

                    Dann mein /NOT/

                    Also
                    /\s+/NOT/

                    Noch ein \s+ fürs Ende

                    Also

                    /\s+/NOT/\s+

                    Aber natürlich funzt es nicht

                    1. Hi,

                      Also mal ganz langsam
                      / immer an Anfang
                      \s+ das sind ein oder mehrere Lee(h)rzeichen.
                      Also
                      /\s+
                      Dann mein /NOT/
                      Also
                      /\s+/NOT/

                      Bitte such Dir ein Regex-Tutorial! Und arbeite es durch.
                      5 Minuten Handbuchlesen ersparen einige Stunden sinnloses Rum-Experimentieren.

                      cu,
                      Andreas

                      --
                      Warum nennt sich Andreas hier MudGuard?
                      O o ostern ...
                      Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.
                      1. Hi,

                        Bitte such Dir ein Regex-Tutorial! Und arbeite es durch.
                        5 Minuten Handbuchlesen ersparen einige Stunden sinnloses Rum-Experimentieren.

                        Ich habs gemacht und mir ein FireFox Addin runtergeladen.
                        Hat dann alles geklappt der Fehler war dann doch woanders.

                        Aber meine Lösung dafür
                        tmp2 = tmp2.replace(/(\s+\NOT\s+).*/,"");

                        VG

                        1. Hi, nun zum eigentlichen Problem.

                          Ich nutze ein Script. Hier wird ein Suchstring per Hand eingegeben.
                          Das Script packt die einzelen Suchstrings dann in ein Array (getrennt durch ein ","). Und sucht danach auf einer Homepage. Die Ergebnisse werden extrahiert und dann mit dem "name" gespeichert. Je eine Datei für einen geklammerten Suchstring.

                          So sieht das Skript aus:

                          //imacros-js:showsteps no  
                            
                          var ret, start, i, str, subnr, part, limit;  
                            
                          limit = 500;  
                          start = 1;  
                          part = 0;  
                          index = "EXT";  
                            
                          str = prompt("Suchstring","");  
                          //str = "(amer* int* grp*),(aig financial),(lexington insurance),(mt mansfield NOT Mt Mansfield Union)";  
                          search = str.split(",");  
                          subnr = prompt("Index="+index+", BvdID?","");  
                            
                            
                          for (var i=start; i<=max; i++) {  
                                    ++part;  
                            
                            
                          var tmp2 = null;  
                          tmp2=search[j];  
                            
                          tmp2 = tmp2.replace(/(\s+\NOT\s+).*/,"");  
                          //tmp2 = tmp2.replace(/\n/g,"");  
                          tmp2 = tmp2.replace(/\*/g,"");  
                          tmp2 = tmp2.replace("(","");  
                          tmp2 = tmp2.replace(")","");  
                          tmp2 = tmp2.replace(/\s/g,"_");  
                            
                          name = subnr+"#"+part+"##"+tmp2;
                          

                          Das Problem ist, dass ich den Suchstring nicht einlesen kann wie in der ausgeklammerte Zeile (//str = "(amer* int* ...) angegeben, sondern so:

                          "(amer* int* grp*),
                          (aig financial),
                          (lexington insurance),
                          (mt mansfield NOT Mt Mansfield Union)"

                          Also mit Zeilenumbrüchen. Genau die stören aber beim Schreiben des Dateinames. Denn es entsteht immer ein Leerzeichen nach dem "##" (erst ab Datei 2, also ab dem ersten Zeilenumbruch), und wenn wirklich ein "NOT" kommt (was ich ja vorhin ausfiltern/ersetzen wollte), dann wird die Datei mit gleichem Namen zweimal gespeichert und diese ist dann nur in der Eingabeaufforderung und auch nur mit dem 8.3dos Namen löschbar.

                          Die Fehler hab ich nicht, wenn ich es so einlesen würde:
                          "(amer* int* grp*),(aig financial),(lexington insurance),(mt mansfield NOT Mt Mansfield Union)".

                          Hier jemand eine Idee?

                          tmp2 = tmp2.replace(/\n/g,""); Bringt nichts
                          VG

                        2. @@kidchino:

                          nuqneH

                          Ich habs gemacht und mir ein FireFox Addin runtergeladen.

                          Aladdin?

                          Hat dann alles geklappt der Fehler war dann doch woanders.

                          Nö, der Fahler war genau in deiner Zeile JavaScript.

                          Aber meine Lösung dafür

                          zeigt, dass du noch nicht alles durchschaut hast.

                          tmp2 = tmp2.replace(/(\s+\NOT\s+).*/,"");

                          Wozu die Klammern im Ausdruck? Du willst alles wegschmeißen, nicht etwas davon aufheben. Und was soll der \ vor dem N?

                          Qapla'

                          --
                          „Talente finden Lösungen, Genies entdecken Probleme.“ (Hans Krailsheimer)
                          1. Aladdin?

                            Nö.Regular Exp. Tester.

                            Nö, der Fahler war genau in deiner Zeile JavaScript.

                            Ja, war er natürlich auch, aber ich hatte eine Zeile aus Versehen gelöscht. Daher wurde das Array nicht übergeben und ich konnte machen was ich will, ich habe immer "Null" mit dem regex versucht zu ersetzen. Das lief natürlich auch nicht weiter.

                            zeigt, dass du noch nicht alles durchschaut hast.

                            tmp2 = tmp2.replace(/(\s+\NOT\s+).*/,"");
                            Wozu die Klammern im Ausdruck? Du willst alles wegschmeißen, nicht etwas davon aufheben. Und was soll der \ vor dem N?

                            Die Klammer stört doch nicht oder? Aber klar, sinnfrei.
                            Die \NOT hatte ich gesetzt, weil es teilweise störe bei einem iMacro. Und ich es dann verwechselt habe. Hier natürlich nicht richtig.

                            kid

                            1. Hab auch das Problem mit den Zeilenumbrüchen gelöst. Zwar umständlich aber für mich okay-

                              var tmp3 = tmp2.substr(0,1);  
                              if (tmp2.substr(0,1)== " ")	  
                              {  
                              tmp2 = tmp2.substr(1, tmp2.length-1);  
                              }
                              

                              Hat sicherlich Schwachstellen aber ich bin zufrieden.

  2. @@kidchino:

    nuqneH

    tmp2 = tmp2.replace(/\NOT/i,"");
    So würde ich es versuchen, aber ich weiß halt nicht wie ich den Rest dannach lösche.

    Indem du den <http://de.selfhtml.org/perl/sprache/regexpr.htm#zeichenketten@title=Rest mit in dein Suchmuster> aufnimmst. Das ist ja gerade die Stärke von regulären Ausdrücken, dass sie nicht nur mit festen Zeichenketten umgehen können.

    Eine andere Möglichkeit wäre nicht mit regulärem Ausdruck, sondern das (erste) http://de.selfhtml.org/javascript/objekte/string.htm#index_of@title=Vorkommen von 'NOT' zu suchen und den String <http://de.selfhtml.org/javascript/objekte/string.htm#substr@title=von Anfang bis dahin> zu nehmen.

    Qapla'

    --
    „Talente finden Lösungen, Genies entdecken Probleme.“ (Hans Krailsheimer)