如何使用正则表达式实现:将字符串只根据第一个匹配的内容进行分割

770 阅读2分钟

一.通常情况 我们经常会需要通过正则表达式来分割字符串,一般都是将全部匹配到的内容进行分割

类似这种:'title:正则表达式,message:正则表达式的学习和使用,author:张三'

通过':'(冒号)分割成我们想要的数据,即:[title,正则表达式][message,正则表达式的学习和使用,[author,张三]]

Ⅰ.上面的实现方式通常常见的为:

const eg = 'title:正则表达式,message:正则表达式的学习和使用,author:张三';
const egSplit = eg.split(',');console.log(egSplit)
//  ["title:正则表达式", "message:正则表达式的学习和使用", "author:张三"]

Ⅱ.最后通过巡回上面的数组实现key和value的获取

const eg = 'title:正则表达式,message:正则表达式的学习和使用,author:张三';
const egSplit = eg.split(',');
console.log(egSplit);
//  ["title:正则表达式", "message:正则表达式的学习和使用", "author:张三"]// 第二步:
const egSplitArray = [];
egSplit.forEach(item=>{    egSplitArray.push(item.split(':'))})console.log(egSplitArray)
//

然后就获取到对应的key和value

注意:以上这种情况的实现有很多,这种这是一种实现方式,网上一搜一大把的方法

变型:字符串只根据第一个匹配的内容进行分割

如果提供的数据是这种的不规范的,那么上面的方法就不再适用了因为

const eg = 'title:正则表达式,message:正则表达式的学习和使用:使用者用起来很舒服:张三说,author:张三';

我们还是按上面第一步和第二部处理直接看下结果会是什么。

第一步

 

["title:正则表达式", "message:正则表达式的学习和使用:使用者用起来很舒服:张三说", "author:张三"]

第二步

(2) ["title", "正则表达式"](4) ["message", "正则表达式的学习和使用", "使用者用起来很舒服", "张三说"](2) ["author", "张三"]

很显然第二个数组的数据不是我们想要的。

我们想要的数据格式应该是:

["message", "正则表达式的学习和使用:使用者用起来很舒服:张三说"]

破解方法:

第二部处理方式改变一下:

// 第二步:
const egSplitArray = [];
egSplit.forEach(item=>{ 
    egSplitArray.push(item.split(/:(.+)/))
})
console.log(egSplitArray)
//打印结果
(3) [Array(3), Array(3), Array(3)]0: (3) ["title", "正则表达式", ""]1: (3) ["message", "正则表达式的学习和使用:使用者用起来很舒服:张三说", ""]2: (3) ["author", "张三", ""]length: 3__proto__: Array(0)

其实是用到 (.+) 这个感兴趣的同学可以深入了解一下。