2016-08-04 14 views
0

ich auf einer Website diesen Text haben Schaben ich kratzen wollen:Wie man einen regulären Ausdruck für das Web schreiben

event: new SEvent({"event_id":"Id","date":"Sat 27 Aug 2016"}) 

Ich möchte das meine JavaScript-Datei von meinem Controller zu übergeben, die nach oben bereits gesetzt ist.

Ich habe Probleme die Informationen Parsen, so dass nur das zurückgegeben wird:

SEvent({"event_id":"Id","date":"Sat 27 Aug 2016"}) 

Hier ist, was ich ohne Erfolg versucht:

info = text.to_s.scan(/\"(event)/).uniq 

Antwort

0

Sie mit folgenden regex versuchen:

/event: new (\w+\([^)]+\))/ 
+0

Das oben genannte funktioniert ein Traum, außer wenn ich das Ding zum Postboten sende und es so im Postboten aussieht: 'SEEvent ({\" event_id \ ": \" Id \ ", \" date \ ": \" Sa 5 Nov 2016, 19: 30 \ ' –

+0

irgendwelche Ideen, wie man es json freundlicher machen kann? –

+0

"irgendwelche Ideen, wie man es json freundlicher bildet?" Sollte eine unterschiedliche Frage sein. Springen von einem Problem zum anderen in den Kommentaren ergibt verwirrende Fragen und Antworten, und verdünnt die Macht von Stack Overflow, die eine separate Seite für individuelle Programmierprobleme haben soll. –

1

Sie nicht grundsätzlich entfernen möchten die "event: new" Teil der Eingabezeichenfolge? Vielleicht falsch verstanden ich Ihre Frage - wenn nicht, das ist, was Sie tun können:

input = 'event: new SEvent({"event_id":"Id","date":"Sat 27 Aug 2016"})' 

input.gsub('event: new ', '') 
=> 'SEvent({"event_id":"Id","date":"Sat 27 Aug 2016"})' 

oder eine sicherere Option

input.gsub('event: new SEvent', 'SEvent')` 
=> 'SEvent({"event_id":"Id","date":"Sat 27 Aug 2016"})' 
+0

Verwenden Sie 'gsub' nicht, es sei denn, Sie versuchen, mehrere Vorkommen gleichzeitig zu entfernen. 'sub' wäre schneller und die bevorzugte Wahl normalerweise. –

+0

Sie wissen nicht, ob er mehrere Vorkommen tatsächlich entfernen möchte. "Schneller" ist in der Regel kein Argument, ich bezweifle, dass es in den meisten Fällen einen merklichen Leistungsunterschied geben wird. – koffeinfrei

+0

Es kann große Unterschiede geben, es kommt auf den Fall an. In diesem Fall ist es für jede Zeichenfolge klein, es sei denn, es wird eine große Anzahl von Vorgängen verarbeitet. Die Verwendung von "uniq" im OP deutet darauf hin, dass mehrere Vorkommen verarbeitet werden. (Aber der Code und die Frage weisen auch auf Verwirrung darüber hin, wie man eine Lösung schreibt.) Es ist immer besser, zuerst die Methoden zu verwenden, die schneller sind, wenn die Kriterien/Bedingungen nichts anderes verlangen. Das sind nur gelernte Lektionen. –

0

info wird Sei ein Array, das nur die Matches enthält.

Sie passende Derzeit ist nur die Zeichenfolge "event, sondern die gesamte Zeichenfolge Sie wollen übereinstimmen, können Sie so etwas wie verwenden:

scan(/SEvent\(\{\"event[^\)]*\)/) 

, dass die Öffnungs Bezeichnerstring wird übereinstimmen SEvent({"event dann alles bis zum nächsten abschließende Parentesie. die Ihre gesamte gewünschte Zeichenfolge

SEvent({"event_id":"Id","date":"Sat 27 Aug 2016"}) 

Auch erfassen soll, wollte ich mit dem Karat der eckigen Klammern erwähnen [^\)]* bedeutet Spiel 0 oder mehr Zeichen außer Klammer zu schließen.

Verwandte Themen