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