本
文
摘
要
今天看群里有人问如何从lrc文件中提取歌词。
想了一下解决方案,再这里顺便记录一下。
比如有lrc文件如下:
[ver:v1.0][ti:晴天-周杰伦][00:00.82] 晴天[00:05.82] 演唱:周杰伦[00:14.82][00:29.27]故事的小黄花[00:32.30]从出生那年就飘着[00:35.83]童年的荡秋千[00:39.26]随记忆一直晃到现在[00:42.84]rui sou sou xi dou xi la[00:45.72]sou la xi xi xi xi la xi la sou[00:49.60]吹着前奏望着天空[00:52.92]我想起花瓣试着掉落[00:56.25]为你翘课的那一天[00:58.27]花落的那一天[00:59.79]教室的那一间[01:01.60]我怎么看不见[01:03.67]消失的下雨天[01:05.28]我好想再淋一遍[01:10.07]没想到失去的勇气我还留着[01:15.27]好想再问一遍[01:17.49]你会等待还是离开[01:24.34]刮风这天我试过握着你手[01:30.04]但偏偏雨渐渐大到我看你不见[01:38.51]还要多久我才能在你身边[01:44.92]等到放晴的那天也许我会比较好一点[01:52.43]从前从前有个人爱你很久[01:58.07]但偏偏风渐渐把距离吹得好远[02:06.40]好不容易又能再多爱一天[02:13.01]但故事的最后你好像还是说了拜拜[02:34.44]为你翘课的那一天[02:36.26]花落的那一天[02:38.02]教室的那一间[02:39.89]我怎么看不见[02:41.75]消失的下雨天[02:43.52]我好想再淋一遍[02:47.76]没想到失去的勇气我还留着[02:54.21]好想再问一遍[02:55.77]你会等待还是离开[03:02.48]刮风这天我试过握着你手[03:08.07]但偏偏雨渐渐大到我看你不见[03:16.55]还要多久我才能在你身边[03:22.95]等到放晴的那天也许我会比较好一点[03:30.42]从前从前有个人爱你很久[03:36.72]偏偏风渐渐把距离吹得好远[03:44.84]好不容易又能再多爱一天[03:51.04]但故事的最后你好像还是说了拜拜[03:59.00]刮风这天我试过握着你手[04:01.47]但偏偏雨渐渐大到我看你不见[04:05.06]还要多久我才能够在你身边[04:08.49]等到放晴那天也许我会比较好一点[04:12.62]从前从前有个人爱你很久[04:15.49]但偏偏雨渐渐把距离吹得好远[04:18.81]好不容易又能再多爱一天[04:22.60]但故事的最后你好像还是说了目标要删除文件中的时间轴节点,比如[00:00.82]。
这一步很简单,直接把整个字符串按[...]切分开就行。
要匹配"[00:00.82]"这样的字符串,正则可以大略地写成/\[.*?\]/,即"["和]之间有任何个字符。注意其中的"?"表示惰性匹配。代码如下:
varr=string.split(/\[.*?\]/)console.log(r)
结果是:
看结果我们发现有几处不尽如意的地方。
1。有空串,这个简单,结果再过滤一下即可:
varr=string.split(/\[.*?\]/).filter(v=>!!v)console.log(r)
2。歌词两边有空格和回车。要解决这个问题,可以使用数组map。
但是!能否一个正则做到呢?这才是有挑战的事情。
仔细想了一下后,发现其实正则匹配如下字符串就行:
n个空格+n个回车+[00:00.82]+n个空格正则如下:
varr=string.split(/\s*\n*\[.*?\]\s*/).filter(v=>!!v)console.console(r)
结果如下:
本文完。
欢迎阅读本人的《JS 正则迷你书》
更多正则小应用:从lrc文件中提取歌词相关信息请关注本站,本文仅仅做为展示!