Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. (OK) Frage: String alle Zeichen bis zur ersten { löschen

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    (OK) Frage: String alle Zeichen bis zur ersten { löschen

    This topic has been deleted. Only users with topic management privileges can see it.
    • ruhr70
      ruhr70 last edited by

      Kann mir jemand kurz helfen.

      Ich bekomme einen String, der exemplarisch so aussieht:

      Infotext bla bla 4711, 0815 {hier steht der Teil, der mich interessiert (JSON)}
      

      Nun möchte ich in Node-Red per Javascript alles vor der ersten geschweiften Klammer wegschmeissen.

      1 Reply Last reply Reply Quote 0
      • ruhr70
        ruhr70 last edited by

        Kleiner Nachtrag noch: Sollte eine Meldung direkt mit der geschweiften Klammer beginnen, dann soll sich am String nichts ändern.

        1 Reply Last reply Reply Quote 0
        • P
          pix last edited by

          Hallo,

          also du kannst erstmal nach der ersten öffnenden geschweiften Klammer im Text suchen. Der Wert von indexOf gibt dir die Position im String an.

          Dann suchst du die letzte geschweifte Klammer zu mit lastIndexOf(). Das ist die Endposition. Mit substring() kannst du den Teil zwischen diesen Positionen herauslösen und verwenden.

          quelle = 'Infotext bla bla 4711, 0815 {hier steht der Teil, der mich interessiert (JSON)}';
          pos_klammer_auf = quelle.indexOf('{');
          pos_klammer_zu = quelle.lastIndexOf('}');
          ergebnis = quelle.substring(pos_klammer_auf, pos_klammer_zu);
          
          

          Das ist eine sehr einfache Art. Wenn du dich einlesen willst, schau auch mal nach subst(),Slice(),split() zB http://wiki.selfhtml.org/wiki/JavaScript/Objekte/String nach.

          Gruß

          Pix

          PS: Das funktioniert natürlich nur, wenn es dir auf die erte und letzte Klammer ankommt (nur ein Klammernpaar vorkommt). indexOf sucht immer das erste Vorkommen, lastIndexOf immer das Letzte.

          1 Reply Last reply Reply Quote 0
          • ruhr70
            ruhr70 last edited by

            Super Pix!

            Das hat funktioniert!! Danke! Danke!

            Dass das in Javascript so einfach geht.

            Bei der letzten Position hat es noch ein +1 gebraucht.

             ergebnis = quelle.substring(pos_klammer_auf, pos_klammer_zu+1);
            

            Danke Dir noch einmal.

            Jetzt bekomme ich schon einmal jede Meldung im Geofence Node-red Flow mit 😉

            Gruß

            Michael

            1 Reply Last reply Reply Quote 0
            • Bluefox
              Bluefox last edited by

              Sollte auch so gehen:

              var quelle = 'Infotext bla bla 4711, 0815 {hier steht der Teil, der mich interessiert (JSON)}';
              var match = quelle.match(/{(.*)}/);// Regex
              var ergebnis = match ? match[0] : null;
              
              
              1 Reply Last reply Reply Quote 0
              • ruhr70
                ruhr70 last edited by

                @Bluefox:

                Sollte auch so gehen:

                var quelle = 'Infotext bla bla 4711, 0815 {hier steht der Teil, der mich interessiert (JSON)}';
                var match = quelle.match(/{(.*)}/);// Regex
                var ergebnis = match ? match[0] : null;
                
                ```` `  
                

                Danke! Ein schönes Beispiel zum lernen 😉

                ich verstehe weder die erste, noch die zweite Zeile.

                Werde mir aber Mühe geben, dass ich es am Ende begreife.

                Auch wenn ich oben schon zum Ziel gekommen bin, bin ich für so Beispiel und andere Herangehensweisen einfach dankbar!

                1 Reply Last reply Reply Quote 0
                • P
                  pix last edited by

                  @ruhr70:

                  @Bluefox:

                  Sollte auch so gehen:

                  var quelle = 'Infotext bla bla 4711, 0815 {hier steht der Teil, der mich interessiert (JSON)}';
                  var match = quelle.match(/{(.*)}/);// Regex
                  var ergebnis = match ? match[0] : null;
                  
                  ```` `  
                  

                  Danke! Ein schönes Beispiel zum lernen 😉

                  ich verstehe weder die erste, noch die zweite Zeile.

                  Werde mir aber Mühe geben, dass ich es am Ende begreife.

                  Auch wenn ich oben schon zum Ziel gekommen bin, bin ich für so Beispiel und andere Herangehensweisen einfach dankbar! `
                  Ich habe auch ein wenig darber nachdenken müssen, aber es ist eigentlich ganz klar: match sucht zwischen (/ und /) eine Zeichenkette, die mit { anfängt und mit } aufhört. Dazwischen sind nur Reguläre Ausdrücke (Regular Expressions) erlaubt. Der Inhalt wird in ein Array gespeichert.

                  Die letzte Zeile verstehe ich nicht ganz. Ist ja ne If-Anweisung-Kurzschreibweise. Wenn match einen Treffer hat, dann der ersten Wert aus dem Array nehmen, sonst null;

                  Ich finde das auch sehr gut, wenn solche Beispiele hier gepostet werden. Dadurch kann man sich die unumgänglichen Skripte irgendwann selbst schreiben. Weiter so!

                  Gruß

                  Pix

                  1 Reply Last reply Reply Quote 0
                  • Bluefox
                    Bluefox last edited by

                    ` > Ich habe auch ein wenig darber nachdenken müssen, aber es ist eigentlich ganz klar: match sucht zwischen (/ und /) eine Zeichenkette, die mit { anfängt und mit } aufhört. Dazwischen sind nur Reguläre Ausdrücke (Regular Expressions) erlaubt. Der Inhalt wird in ein Array gespeichert.

                    Die letzte Zeile verstehe ich nicht ganz. Ist ja ne If-Anweisung-Kurzschreibweise. Wenn match einen Treffer hat, dann der ersten Wert aus dem Array nehmen, sonst null;

                    Ich finde das auch sehr gut, wenn solche Beispiele hier gepostet werden. Dadurch kann man sich die unumgänglichen Skripte irgendwann selbst schreiben. Weiter so!

                    Gruß

                    Pix `
                    Absolut alles richtig beschrieben.

                    Die RegEx sind super mächtig und mittlerweile sogar schneller als (indexOf /indexOf - war selber überrascht).

                    Wenn man die versteht, dann hat man super Werkzeug zur Verfügung.

                    P.S.

                    Person1: - Ich kann fremde Gedanken lesen!

                    Person2: - Hm… ich kann fremde reguläre Ausdrücke verstehen!

                    Person1: - Ok. Du hast gewonnen.

                    1 Reply Last reply Reply Quote 0
                    • First post
                      Last post

                    Support us

                    ioBroker
                    Community Adapters
                    Donate

                    393
                    Online

                    31.8k
                    Users

                    80.0k
                    Topics

                    1.3m
                    Posts

                    3
                    8
                    3292
                    Loading More Posts
                    • Oldest to Newest
                    • Newest to Oldest
                    • Most Votes
                    Reply
                    • Reply as topic
                    Log in to reply
                    Community
                    Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                    The ioBroker Community 2014-2023
                    logo