像音乐播放器一样,可以把歌词文件解析为方便使用的对象
效果如下:
代码如下:
用法:
/***** 用法 ******/
const lrc = `
[ti:沙漠骆驼]
[ar:展展与罗罗]
[al:]
[by:芥末]
[00:00.00]沙漠骆驼 - 展展与罗罗
[00:03.00]作词:展展与罗罗
[00:06.00]作曲:展展与罗罗
[00:09.00]歌词编辑:果果
[00:18.00]
[00:26.21]我要穿越这片沙漠
[00:28.24]找寻真的自我
[00:30.39]身边只有一匹骆驼陪我
[00:34.75]这片风儿吹过
[00:36.92]那片云儿飘过
[00:39.15]突然之间出现爱的小河
[00:43.60]我跨上沙漠之舟
[00:45.77]背上烟斗和沙漏
[00:47.88]手里还握着一壶烈酒
[05:24.97]END `;
const result = parseLyric(lrc)
console.log(result);
/***** 用法 ******/
const result = parseLyric(lrc)
console.log(result);
function parseLyric(lyric) {
const lrcObj = {
ti: '',
ar: '',
al: '',
by: '',
lrc: []
};
/*
[ar:艺人名]
[ti:曲名]
[al:专辑名]
[by:编者(指编辑LRC歌词的人)]
[offset:时间补偿值] 其单位是毫秒,正值表示整体提前,负值相反。这是用于总体
*/
const lrcArr = lyric.split("\n").filter(function (value) {
// 1.通过回车去分割歌词每一行,遍历数组,去除空行空格
return value.trim() !== ''
}).map(function (value) {
// 2.解析歌词
const line = parseLyricLine(value.trim())
// console.log(line);
if (line.type === 'lyric') {
lrcObj.lrc.push(line.data)
} else {
lrcObj[line.type] = line.data
}
return value.trim();
})
function parseLyricLine(line) {
const tiArAlByExp = /^\[(ti|ar|al|by):(.*)\]$/
const lyricExp = /^\[(\d{2}):(\d{2}).(\d{2})\](.*)/
let result
if ((result = line.match(tiArAlByExp)) !== null) {
return {
type: result[1],
data: result[2]
}
} else if ((result = line.match(lyricExp)) !== null) {
return {
type: 'lyric',
data: {
time: {
m: result[1],
s: result[2],
ms: result[3]
},
lyric: result[4].trim()
}
}
}
}
return lrcObj;
}
扫码在手机查看
您没有登录或者此篇文章不允许评论哟~~
暂无评论