ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2021-07-02 14:30:40  阅读:234  来源: 互联网

标签:00 func replace 正则 context time regexp 元组


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

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函数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)这样的方法搭配元组还可以这么玩~

标签:00,func,replace,正则,context,time,regexp,元组
来源: https://blog.csdn.net/qq_45593068/article/details/118413372

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有