我正在尝试解析itunes XML库。我想从XML文件中获取所有唯一艺术家名称的数组。我已经尝试将其转换为JSON,但是itunes将它们的库存储在XML中的方式使得访问库中的所有艺术家名称变得异常困难。为此目的,正则表达式更有效。
文件的格式如下:
<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>
&#13;
我有一个xml文件,可以包含数百个不同的艺术家。 &#34;数据&#34;是xml文件的内容,上面的XML示例只是一个轨道。
我正在使用regex和string.match()来匹配:
<key>Artist</key><string>Eric Dolphy</string>
并返回艺术家的名字。它返回所有匹配的数组,但我只想要艺术家名称而不是xml标签。我发现在javascript中使用带有regex / g的string.match()会返回一个包含所有匹配的子字符串的数组,但不会返回捕获组。
有没有一种方法在javascript中我可以获得一个只返回艺术家名称的数组而不使用str.replace()来替换我之后不想要的空字符串?
let artists = data.toString().match(/<key>Artist<\/key><string>(.*?)<\/string>/g);
let uniqueArtists = Array.from(new Set(artists))
&#13;
答案 0 :(得分:-1)
匹配返回正则表达式的匹配数组。数组中的第一项将是完全匹配,第二项将匹配您的第一个子模式(括号之间)。等。
您正在寻找的是:
let artist = artists[1];
&#13;