一、思想
读取歌词文件——解析读取到的数据——分析读取到的数据——获取每段歌词的读取时间——根据时间来控制内容的读取。大概思路就是这样,十分的粗暴、简单。代码已经上传github(https://github.com/zhuyangmsg/node-lyric),需要的可以去下载。
二、运用到的模块
fs模块:用来读取歌词文件内的数据。
readline模块:逐行读取文件内的数据。
path模块:用来组合路径。
三、代码解析
1、拼接路径,找到歌词文件的存放路径
2、逐行读取歌词文件,首先要创建读取流。创建一个读取流输出入口,才能进行逐行读取。
3、解析数据,通过定时间控制数据的显示形式。
四、局部分析
1、两种方式实现逐行读取代码。第一种利用readline模块,获取到的数据是成行的形式,逐步显示。第二种,通过读取流的方式,来获取数据,获取到的数据是成块的形式,逐步显示。第二种方式解析的时候,还要进行处理,把块形式的数据处理成行形式的数据。
2、exec语法解析:exec与match相似,有不完全相同。exec匹配出来的正则字段,以数据的形式展示,如再次打印,则会找到下一次匹配的字符位,进行匹配搜索。如:console.log(/ab/.exec("ababababab")) ===》 [ 'ab', index: 0, input: 'ababababab' ] 匹配到第0位,存在ab字符。下一次打印,index会到第2依次匹配字符。
正则小括号()的作用:(1). 在被修饰匹配次数的时候,括号中的表达式可以作为整体被修饰 (2). 取匹配结果的时候,括号中的表达式匹配到的内容可以被单独得到
so
let item = "[00:00.07]戈壁天堂 - 周晓鸥"; let reg = /\[(\d{2})\:(\d{2})\.(\d{1,3})\](.+)/; let arrayLine=reg.exec(item); //按照正则规则,把小括号里面切分成数组形式,注意:0位代表整段(item)