一步剥离lrc格式文本的时间与歌词信息
本帖最后由 马黑黑 于 2023-1-16 17:38 编辑对lrc歌词的处理,我们的花潮LRC在线制作程序早已实现,但一般难以直观看到其转换lrc为花潮格式的原理。这里提供一个处理机制,因为应对的是标准的lrc歌词结构,这个机制非常简洁。
首先了解一下最常见的lrc格式,以网易云音乐在线歌词为例,把头尾去掉后,它长酱紫:
朱红色的纽扣镶上你送我的钗\n金玉口难开纵然你只为伊而改\n游走在巷门外灯影盼我离开\n躲开你眼神留我一个人去猜\n今后的小说里会有我\n被世俗推脱被年华错过\n逃离这一时世的迷离\n能否换你共度三生烟火
里面有很多 \n ,其实这是换行符,所以上面的lrc也可以写成酱紫:
朱红色的纽扣镶上你送我的钗
金玉口难开纵然你只为伊而改
游走在巷门外灯影盼我离开
躲开你眼神留我一个人去猜
今后的小说里会有我
被世俗推脱被年华错过
逃离这一时世的迷离
能否换你共度三生烟火
不论怎么写,分行还是用 \n 表示,我们都把它看成一个分行的字符串,把它放到一个字符串变量里:
let str = `
朱红色的纽扣镶上你送我的钗
金玉口难开纵然你只为伊而改
游走在巷门外灯影盼我离开
躲开你眼神留我一个人去猜
今后的小说里会有我
被世俗推脱被年华错过
逃离这一时世的迷离
能否换你共度三生烟火
`;
注意观察歌词里有没有反引号 ` ,如有,会发生冲突,把它转义 \` 或换成变得字符。
然后我们写一个小函数:
let foo = (str) => {
let reg = /\[(\d{2}:\d{2}.\d{2})\](.*)/g;
if(str.match(reg)) {
str = str.replace(reg,'$1,$2');
}
return str;
};
函数很简单:先构建一个正则,让它去匹配中括号内的时间和中括号外面的字符串,表达式里将时间信息分为第一组,歌词信息分为第二组。接着,用 match 去检测匹配函数调用者传递来的 str 参数,如果匹配,则处理 str 值,用 replace 替换正则表达式匹配的内容,替换为 $1 和 $2 ,$1 对应正则表达式所匹配的中括号里的内容,$2 对应的是中括号以外的内容即歌词。最后,将替换后的 str 返回给调用者。
如果我们这样调用函数:
console.log(foo(str));
则,在浏览器的控制台,会看到这样的结果:
00:14.70,朱红色的纽扣镶上你送我的钗
00:18.42,金玉口难开纵然你只为伊而改
00:22.20,游走在巷门外灯影盼我离开
00:26.04,躲开你眼神留我一个人去猜
00:29.67,今后的小说里会有我
00:33.45,被世俗推脱被年华错过
00:37.14,逃离这一时世的迷离
00:40.95,能否换你共度三生烟火
这是我们所需要的结果吧?
当然,这里只是简单处理,真正要做事,还有很多事情要考虑、细化。
当然,如果直接用 replace 或 replaceAll 替换掉符号 [ 和 ] 也是可以的,那还要简洁。 这样一处理,果然简洁很多{:4_187:} 这种书写方式是和函数调用方式紧密相关的吧? 红影 发表于 2023-1-16 18:23
这样一处理,果然简洁很多
取得两种信息是基础,在这个基础上,同步歌词中按 @小辣椒 所说的“直接同步”就可以了,当然细节还会很多 红影 发表于 2023-1-16 18:29
这种书写方式是和函数调用方式紧密相关的吧?
函数是去处理原本的格式,将原本格式里的东东取出自己所要的东东。函数的编写,总是根据需要来的。 马黑黑 发表于 2023-1-16 18:59
取得两种信息是基础,在这个基础上,同步歌词中按 @小辣椒 所说的“直接同步”就可以了,当然细节还会很 ...
全考虑周全也挺不容易的{:4_204:} 红影 发表于 2023-1-16 21:11
全考虑周全也挺不容易的
需要考虑和处理的细节很多的 马黑黑 发表于 2023-1-16 19:00
函数是去处理原本的格式,将原本格式里的东东取出自己所要的东东。函数的编写,总是根据需要来的。
嗯,歌词的表达看着简单了,其他要花的功夫也不少{:4_173:} 红影 发表于 2023-1-16 21:14
嗯,歌词的表达看着简单了,其他要花的功夫也不少
是的 马黑黑 发表于 2023-1-16 21:15
是的
黑黑真棒{:4_187:} 马黑黑 发表于 2023-1-16 21:12
需要考虑和处理的细节很多的
看起来还挺费工夫的,这个我就不懂了,估计要你自己钻研了{:4_204:} 红影 发表于 2023-1-16 22:04
看起来还挺费工夫的,这个我就不懂了,估计要你自己钻研了
好的{:4_170:} 红影 发表于 2023-1-16 22:02
黑黑真棒
{:4_203:} 马黑黑 发表于 2023-1-16 22:08
好的
我来端茶递水{:4_190:} 红影 发表于 2023-1-17 14:01
我来端茶递水
不敢当不敢当 马黑黑 发表于 2023-1-17 17:36
不敢当不敢当
别的忙也帮不上啊,不懂代码{:4_173:} 红影 发表于 2023-1-17 21:24
别的忙也帮不上啊,不懂代码
那也不至于劳驾你 马黑黑 发表于 2023-1-17 22:25
那也不至于劳驾你
呵呵,我是被嫌弃了呗{:4_173:} 红影 发表于 2023-1-18 16:04
呵呵,我是被嫌弃了呗
你是高端人才,怎能端茶倒水呢
页:
[1]
2