歌词解析

145 阅读1分钟
  function parseLyric(lyricString) {
  // 1. 根据换行符切割
  const lyricLineStrings = lyricString.split('\n')
  const lyricLines = []
  
  // 匹配时间的正则
  const re = /\[(\d{2}):(\d{2})\.(\d{2,3})\]/

  // 2. 针对每一行歌词进行解析 [00:24.380]我好想住你隔壁
  for (const lyric of lyricLineStrings) {
    // ['[00:00.000]', '00', '00', '000', index: 0, input: '[00:00.000] 作词 : 许嵩', groups: undefined]
    const timeString = re.exec(lyric)
    if (!timeString) continue // 如果有值再做操作,没值过掉这次循环,进行下次循环
    // 转毫秒
    const time1 = timeString[1] * 60 * 1000
    const time2 = timeString[2] * 1000
    const time3 = timeString[3].length === 3 ? timeString[3] * 1 : timeString[3] * 10
    // 获取时间
    const time = time1 + time2 + time3  // 0 1000 2000...

    // 3. 获取歌词, trim去空格
    const content = lyric.replace(re, '').trim()

    // 讲对象放在数组中
    lyricLines.push({ time, content })
  }
  console.log(lyricLines)
  /*
    {time: 0, content: '作词 : 许嵩'}
    {time: 1000, content: '作曲 : 许嵩'}
    {time: 2000, content: '编曲 : 许嵩'}
    ...
   */
  return lyricLines
}


//  请求的歌词...
const lyricString = '[00:00.000] 作词 : 许嵩\n
                     [00:01.000] 作曲 : 许嵩\n
                     [00:02.000] 编曲 : 许嵩\n
                     [00:22.240]天空好想下雨\n
                     [00:24.380]我好想住你隔壁\n'
// 解析歌词                  
const lyricStringInfo = parseLyric(lyricString)