2016-09-21 1 views
-1

Ich versuche, eine Itunes-XML-Bibliothek zu analysieren. Ich möchte ein Array aller eindeutigen Künstlernamen aus der XML-Datei erhalten. Ich habe bereits versucht, es in JSON zu konvertieren, aber die Art, wie itunes ihre Bibliothek in XML speichert, machte es unglaublich schwierig, auf alle Interpretennamen in der Bibliothek zuzugreifen. Die Regex sah für diesen Zweck viel effektiver aus.Regex mit Javascript, um nur die Zeichenfolge zwischen zwei Zeichenfolgen zurückzugeben

Das Format der Datei ist wie folgt:

<dict> 
 
    <key>Track ID</key><integer>219</integer> 
 
    <key>Name</key><string>Something Sweet, Something Tender</string> 
 
    <key>Artist</key><string>Eric Dolphy</string> 
 
    <key>Album Artist</key><string>Eric Dolphy</string> 
 
    <key>Album</key><string>Out to Lunch (Remastered)</string> 
 
    <key>Genre</key><string>Jazz</string> 
 
    <key>Kind</key><string>Purchased AAC audio file</string> 
 
    <key>Size</key><integer>12175953</integer> 
 
    <key>Total Time</key><integer>363949</integer> 
 
    <key>Disc Number</key><integer>1</integer> 
 
    <key>Disc Count</key><integer>1</integer> 
 
    <key>Track Number</key><integer>2</integer> 
 
    <key>Track Count</key><integer>5</integer> 
 
    <key>Year</key><integer>1964</integer> 
 
    <key>Date Modified</key><date>2016-04-29T09:36:10Z</date> 
 
    <key>Date Added</key><date>2007-08-04T16:57:47Z</date> 
 
    <key>Bit Rate</key><integer>256</integer> 
 
    <key>Sample Rate</key><integer>44100</integer> 
 
    <key>Release Date</key><date>1964-02-25T00:00:00Z</date> 
 
    <key>Artwork Count</key><integer>1</integer> 
 
    <key>Sort Album</key><string>Out to Lunch</string> 
 
    <key>Sort Artist</key><string>Eric Dolphy</string> 
 
    <key>Sort Name</key><string>Something Sweet, Something Tender</string> 
 
    <key>Persistent ID</key><string>4AE13A27A2113C97</string> 
 
    <key>Track Type</key><string>Remote</string> 
 
    <key>Purchased</key><true/> 
 
</dict>

ich eine XML-Datei haben, die Hunderte von verschiedenen Künstlern enthalten. "Daten" ist der Inhalt der XML-Datei, von der das obige XML-Beispiel nur eine Spur ist.

Ich bin mit regex und string.match() entsprechen: <key>Artist</key><string>Eric Dolphy</string> und zurück den Namen des Künstlers. Es gibt ein Array aller Übereinstimmungen zurück, aber ich möchte nur den Künstlernamen und nicht die XML-Tags. Ich habe festgestellt, dass die Verwendung von string.match() mit regex/g in Javascript ein Array zurückgibt, das alle übereinstimmenden Teilstrings enthält, aber die Capture-Gruppen werden nicht zurückgegeben. Gibt es einen Weg in Javascript, dass ich ein Array nur von den Künstlernamen zurückgegeben bekommen kann, ohne str.replace() zu verwenden, um alles, was ich nicht will, danach durch eine leere Zeichenfolge zu ersetzen?

let artists = data.toString().match(/<key>Artist<\/key><string>(.*?)<\/string>/g); 
 
let uniqueArtists = Array.from(new Set(artists))

+0

Verwenden Look-Ahead und Lookbehind. – Barmar

+1

Was sind Daten? Wie haben Sie dieses Objekt erstellt? – trincot

+1

Parsen Sie XML nie mit Regex. – Bergi

Antwort

-1

Spiel gibt ein Array von Spielen Ihrer regex. Das erste Element im Array ist die vollständige Übereinstimmung, das zweite Element entspricht dem ersten Untermuster (in Klammern). etc ..

Was Sie suchen ist:

let artist = artists[1];

Verwandte Themen