开发者问题收集

Javascript 正则表达式失败

2016-05-01
87

我有一个以下格式的字符串输出:

mp3 @ 0x75b225b8]Estimating duration from bitrate, this may be inaccurate
[lavf] stream 0: audio (mp3), -aid 0
[lavf] stream 1: video (mjpeg), -vid 0, 

Clip info:
 Release date: Songspk.LINK
 album_artist: Various Artists
 album: Kapoor & Sons (Since 1921)
 artist: Tanishk Bagchi, Arijit Singh & Asees Kaur

 composer: Amaal Mallik | Songspk.LINK
 disc: 1/1
 encoded_by: Lame
 genre: Bollywood Music
 title: Bolna - Songspk.LINK
 track: 1/1
 EpisodeID: Songspk.LINK
 copyright: Songspk.LINK
 TOPE: Amaal Mallik | Songspk.LINK
 TIT1: Songspk.LINK
 TIT3: Songspk.LINK

我需要提取以下字段:

album: Kapoor & Sons (Since 1921)
artist: Tanishk Bagchi, Arijit Singh & Asees Kaur

我尝试了以下操作但无法提取字段:

if(data.indexOf('album:') !== -1) {
    this.artist = data.match(/artist: ([^']*)/)[1];
}

编辑: 我能得到的最接近的结果是:

/Clip info:\n(.*)\n(.*)\n(.*)\n(.*)/

转储整个对象看起来不错。

[ ' artist: Tanishk Bagchi, Arijit Singh & Asees Kaur', 
  'Tanishk Bagchi, Arijit Singh & Asees Kaur', 
  index: 105, 
  input: 'Clip info:\n Release date: Songspk.LINK\n album_artist: Various Artists\n album: Kapoor & Sons (Since 1921)\n artist: Tanishk Bagchi, Arijit Singh & Asees Kaur\n composer: Amaal Mallik | Songspk.LINK\n disc: 1/1\n encoded_by: Lame\n' ] 

但在尝试引用索引 1 时,我收到 TypeError:无法读取 null 的属性“1”。

2个回答

明白了 /artist: (.*)/ 似乎有效

nitimalh
2016-05-01

I tried the following but cannot extract the fields :
if(data.indexOf('album:') !== -1) { this.artist = data.match(/artist: ([^']*)/)[1]; }

问题是您正在使用 否定字符类 [^'] ,它匹配 任何字符,但 ' 除外。换行符 ,而您需要匹配出现在行首的单词“artist”之后的 其余部分。

我相信您可以使用

^ artist: (.*)

或者 - 允许行首出现任何 1+ 水平 个空格,后跟 artist: ,然后跟 0+ 个水平空格,使用

^[^\S\r\n]+artist:[^\S\r\n]*(.*)

请参阅 此正则表达式演示

[^\S\r\n] 匹配任何不是非空格、不是 CR 也不是 LF 的字符。

Wiktor Stribiżew
2016-05-01