2016-08-20 10 views
-2

Ich versuche, etwas Spaß mit twitter API zu tun, Ich möchte auf Twitter mit #np (jetzt spielen) Tag und teilen tweet nach Songname und Künstlername suchen.Wie erhält man einen bestimmten Teil einer Zeichenkette in node.js?

lässt vermuten, dass es diesen Tweet gefunden

"Hören Sie es von L.E.L #NP auf #SoundCloud Will Happen"

ich Songnamen nehmen wollen, Song Künstler und binden an Variablen.

und tweet kann so etwas wie dieses zu

"einfach genial: D #NP Zombie (Metallabdeckung von Leo & Stine Moracchioli) https://youtu.be/4e4bAsQ4r30 über @YouTube"

Ich habe Probleme bekommen mit Verstehen Regex so kann mir jemand einen richtigen Weg zeigen, um dies 2 Beispiel zu tun?

+0

Es sei denn, es gibt ein klares Format bei der Arbeit, es wird sehr schwierig sein, dies zu analysieren. Vor allem, wenn es noch einen anderen regulären Text mit demselben Tweet gibt. Wenn also "Zuhören" nur Text ist, möchten Sie es ignorieren. Wenn "It Will Happen" der Track-Titel ist, möchten Sie ihn greifen. Aber wie würden Sie den Unterschied zwischen einem Titelnamen und anderem Text erkennen? Dies ist nur ein Beispiel, aber das sollte Ihnen eine Vorstellung davon geben, wie schwierig es sein könnte. – Whothehellisthat

+0

Wenn Sie eine Kontrolle darüber haben, wie ein solcher Tweet "aussieht", dann könnten wir herausfinden, wie wir die Dinge analysieren können. Zum Beispiel wäre '{Title Title} von {artist} # np' einfacher herauszufinden, weil die Teile mit diesen geschweiften Klammern markiert wurden. Es ist jedoch schwierig, spezifischere Hilfe ohne eine eindeutigere Struktur zu geben. Es tut uns leid. – Whothehellisthat

+0

Wenn Sie genauere Fragen zu Regex haben und was es kann, würde ich Ihnen trotzdem gerne weiterhelfen. – Whothehellisthat

Antwort

2

Es gibt kaum ein Muster in zufälligen Benutzereingaben zu finden.
Wenn jedoch der meiste Code von einer Quelle erzeugt wird, dann wird oft ein Muster gefunden, das angepasst werden muss.

Es muss wahrscheinlich durch die Quelle getrennt werden.
Da es einfacher ist, mit den Erfassungsgruppen umzugehen.

var tweetString = "Listen to It Will Happen by L.E.L #np on #SoundCloud"; 
 
var myRegexp = /^(.*)(?: by (.*))#\w+.* on #(\w+)$/; 
 
var song = ""; 
 
var artists = ""; 
 
var messagesource = ""; 
 
match = myRegexp.exec(tweetString); 
 
if (match != null) { 
 
    song = match[1]; 
 
    artist = match[2]; 
 
    messagesource = match[3]; 
 
    console.log("song: " + song); 
 
    console.log("artist: " + artist); 
 
    console.log("messagesource: " + messagesource); 
 
}

var tweetString = "just awesome :D #np Zombie (metal cover by Leo & Stine Moracchioli) https://youtu.be/4e4bAsQ4r30 via @YouTube"; 
 
var myRegexp = /^.*#\w+ (.*?)\(.* by (.*)\).* via @(\w+)$/; 
 
var song = ""; 
 
var artists = ""; 
 
var messagesource = ""; 
 
match = myRegexp.exec(tweetString); 
 
if (match != null) { 
 
    song = match[1]; 
 
    artist = match[2]; 
 
    messagesource = match[3]; 
 
    console.log("song: " + song); 
 
    console.log("artist: " + artist); 
 
    console.log("messagesource: " + messagesource); 
 
}

+0

vielen Dank, ja Es ist schwer, ein Muster in zufälligen Benutzereingaben zu finden, es sei denn, Sie suchen nach detaillierten Optionen und schließen den Rest von ihnen aus, es ist die Antwort, durch die Art und Weise habe ich immer noch Probleme mit Regex verstehen können Sie mir geben detaillierte Quelle für die Arbeit daran? :) – nusu

+0

[regular-expressions.info] (http://www.regular-expressions.info/) wird oft empfohlen. Und um mit dem in JavaScript verwendeten Regex-Geschmack zu experimentieren, empfehle ich [regexr.com] (http://www.regexr.com/), das auch eine gute Referenz hat, mit Beispielen. Und zum Experimentieren mit dem PCRE-Flavor [regex101] (https://regex101.com/) wird hier oft auf stackoverflow verwendet, um Beispiele zu zeigen. – LukStorms

2

Eine Erklärung für @LukStorms:

  • ^ Beginn der Zeichenfolge
  • .* Die . entspricht einem beliebigen Zeichen außer neuen Zeilen (\n). Die * bedeutet, dass der vorherige Teil dort 0 mehr mehrmals
  • sollte
  • # wörtliche # Charakter
  • \w+ die \w Streichhölzer jeden Buchstaben in Groß- oder Kleinbuchstaben (oder Unterstrichen, aber das in der Regel keine Rolle spielt); + bedeutet der vorherige Teil (\w) sollte 1 oder mehrere Male
  • (.*?) die Klammern um eine Erfassungsgruppe wickeln (auf die Sie tatsächlich zugreifen können). In diesem Fall würde die Gruppe
  • \( ein Literal ( Zeichen entsprechen.Die \ „entkommt“ das nächste Zeichen, die spezielle Drehen, oder es Unspecial machen; P
  • .* 0 oder mehr Nicht-Zeilenumbrüche
  • by Literaltext
  • (.*) eine Erfassungsgruppe, die 0 oder mehr Nicht-Zeilenumbruch Zeichen
  • \) wörtliche )
  • .* 0 oder mehr nicht-Zeilenumbrüche
  • via @ Literaltext
  • (\w+) eine Erfassungsgruppe, die einen oder mehrere Buchstaben
  • $ Ende der Zeichenfolge

Hoffnung, das hilft. Wenn Sie versuchen, diese Art von Dingen herauszufinden, oder den Fluss der Logik in einer Regex, könnten Sie Regex101 verwenden, wie @LukStorms sagte. Oder etwas, das ich verwende, ist [regexper] (https://regexper.com/#%5E. % 23% 5Cw% 2B% 20 (.% 3F)% 5C (. % 20by% 20 (.)% 5C). *% 20via% 20% 40 (% 5Cw% 2B)% 24).

+0

vielen Dank Es hat mir sehr geholfen :) – nusu

Verwandte Themen