正则表达式-replace(regexp|func)函数用法

分享知识,造福人民,实现我们中华民族伟大复兴!

replace(regexp|func)

查阅文档如下:
MDN - String.prototype.replace()
常见的正则表达式
MDN - 正则表达式

  • 需求:将该歌词用正则解析成一个数组
[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(regexp|func)函数用法
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
})

正则表达式-replace(regexp|func)函数用法
我的实现

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)这样的方法搭配元组还可以这么玩~
上一篇:js 正则RegExp对象替换url参数值


下一篇:golang中的正则表达式