fix(utils/lyrics): [min:sec] timestamp lyrics parse (#1277)

* fix(utils/lyrics): [min:sec] timestamp lyrics parse

* refactor(utils/lyrics): simplify time expression

* style(utils/lyrics): remove duplicate space

Co-authored-by: pan93412 <pan93412@gmail.com>
This commit is contained in:
memorydream 2022-01-28 14:54:40 +08:00 committed by GitHub
parent 8a6c13e62f
commit 769ba47a1d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -9,7 +9,7 @@ export function lyricParser(lrc) {
// regexr.com/6e52n // regexr.com/6e52n
const extractLrcRegex = /^(?<lyricTimestamps>(?:\[.+?\])+)(?!\[)(?<content>.+)$/gm; const extractLrcRegex = /^(?<lyricTimestamps>(?:\[.+?\])+)(?!\[)(?<content>.+)$/gm;
const extractTimestampRegex = /\[(?<min>\d+):(?<sec>\d+)(?:\.|:)(?<ms>\d+)\]/g; const extractTimestampRegex = /\[(?<min>\d+):(?<sec>\d+)(?:\.|:)*(?<ms>\d+)*\]/g;
/** /**
* @typedef {{time: number, rawTime: string, content: string}} ParsedLyric * @typedef {{time: number, rawTime: string, content: string}} ParsedLyric
@ -62,7 +62,8 @@ function parseLyric(lrc) {
for (const timestamp of lyricTimestamps.matchAll(extractTimestampRegex)) { for (const timestamp of lyricTimestamps.matchAll(extractTimestampRegex)) {
const { min, sec, ms } = timestamp.groups; const { min, sec, ms } = timestamp.groups;
const rawTime = timestamp[0]; const rawTime = timestamp[0];
const time = Number(min) * 60 + Number(sec) + 0.001 * Number(ms); const time =
Number(min) * 60 + Number(sec) + Number(ms ?? 0) * 0.001;
/** @type {ParsedLyric} */ /** @type {ParsedLyric} */
const parsedLyric = { rawTime, time, content: trimContent(content) }; const parsedLyric = { rawTime, time, content: trimContent(content) };