分享知识,造福人民,实现我们中华民族伟大复兴!
replace(regexp|func)
- 需求:将该歌词用正则解析成一个数组
[00:00.000] 作词 : Lil E
[00:01.000] 作曲 : Lil E
[00:02.000] 编曲 : Carter Britz p/k/a Fantom
[00:16.51]放松再慢慢升空
[00:18.70]被窝里做一个梦
...
[02:24.980] OP : 嗨库文化
[02:30.626] (未经著作权人许可,不得翻唱、翻录或使用)
需要的解析结果:
replace函数MDN官方解释(只分析正则情况下的第二个实参为函数func的情况):
str.replace(regexp|substr, newSubStr|function)
str.replace(regexp, (match, $1, $2..., offset, string) => {
// match: 正则匹配的串
// $1, $2...: 元组匹配的 /(元组1)(元组2)/g
// offset 下图解释很清楚
// string
})
我的实现:
const songLyric = [];
// 假定str是歌词字符串
str.replace(/(\[\d+:\d+.\d+\]\s*)((?!=])[\u4e00-\u9fa5 a-zA-Z0-4\/\:\(\)\,\、]+)/g, (match, $1, $2) => {
songLyric.push({
time: $1, // (元组1): 匹配[00:00.000]
context: $2 // (元组2): 匹配歌词
});
// console.log('元组1匹配到的 => ', $1);
// console.log('元组2匹配到的 => ', $2);
})
console.log(songLyric);
/*
0: {time: "[00:00.000] ", context: "作词 : Lil E"}
1: {time: "[00:01.000] ", context: "作曲 : Lil E"}
2: {time: "[00:02.000] ", context: "编曲 : Carter Britz p/k/a Fantom"}
3: {time: "[00:16.51]", context: "放松再慢慢升空"}
4: {time: "[00:18.70]", context: "被窝里做一个梦"}
5: {time: "[00:20.57]", context: "外面的噪音太多"}
6: {time: "[00:22.46]", context: "说什么dont wanna know"}
7: {time: "[00:24.64]", context: "我想要翻过山峰"}
8: {time: "[00:26.83]", context: "在乌托邦里穿梭"}
9: {time: "[00:28.69]", context: "没有人能打扰我"}
10: {time: "[00:30.58]", context: "造一座我的王国"}
11: {time: "[00:32.76]", context: "就关闭了所有讯号"}
12: {time: "[00:34.33]", context: "戴上耳机在我脑海里面寻宝"}
13: {time: "[00:36.20]", context: "再见了我的年少轻狂和莽撞"}
14: {time: "[00:38.07]", context: "再见那年夏天为你快的心跳"}
15: {time: "[00:40.27]", context: "much luv 4 ya"}
*/
- 当然实现方法可以有很多,比如上面的正则可以继续优化,再比如你不想写复杂的正则,那么你可以用简单的正则+js方法进一步处理。这里只是为了记录
replace(regexp|func)
这样的方法搭配元组
还可以这么玩~