使用Javascript的正则表达式只返回两个字符串之间的字符串

时间:2016-09-21 19:23:17

标签: regex

我正在尝试解析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;
&#13;
&#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()来替换我之后不想要的空字符串?

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

1 个答案:

答案 0 :(得分:-1)

匹配返回正则表达式的匹配数组。数组中的第一项将是完全匹配,第二项将匹配您的第一个子模式(括号之间)。等。

您正在寻找的是:

&#13;
&#13;
let artist = artists[1];
&#13;
&#13;
&#13;