Javascript 正则表达式匹配和分组直到一系列字符

Javascript 正则表达式匹配和分组直到一系列字符,javascript,regex,Javascript,Regex,我有一个字符串,它有多个关键字,其值由冒号字符(可能还有一个空格)分隔。关键字和值对本身仅由空格分隔(或完全不分隔) 例如: "TAG1: asd asd testTAG2:TEST" "TAG1:asd asd test TAG2:TEST" "TAG1: asd asd test TAG2:TEST TAG1:hello" 然后,我使用这个正则表达式来匹配(TAG1 | TAG2):?(.+),只有当我有一个标记对时,它才起作用。因此,我尝试使用正向前瞻((TAG1 | TAG2):?(.

我有一个字符串,它有多个关键字,其值由冒号字符(可能还有一个空格)分隔。关键字和值对本身仅由空格分隔(或完全不分隔)

例如:

"TAG1: asd asd testTAG2:TEST"
"TAG1:asd asd test TAG2:TEST"
"TAG1: asd asd test TAG2:TEST TAG1:hello"
然后,我使用这个正则表达式来匹配
(TAG1 | TAG2):?(.+)
,只有当我有一个标记对时,它才起作用。因此,我尝试使用正向前瞻(
(TAG1 | TAG2):?(.+)(?=TAG1 | TAG2)
)进行匹配,直到下一次出现,但如果我有一对,这显然不起作用,如果我有两对以上,这也不起作用

因此,我想知道的是,如何将其拆分为匹配项,然后有一个组作为标记名,另一个组作为值:

"TAG1: asd asd testTAG2:TEST"
[["TAG1", "asd asd test"], ["TAG2", "TEST"]]

"TAG1:asd asd test TAG2:TEST"
[["TAG1", "asd asd test"], ["TAG2", "TEST"]]

"TAG1: asd asd test TAG2:TEST TAG1:hello"
[["TAG1", "asd asd test"], ["TAG2", "TEST"], ["TAG1", "hello"]]
除了前瞻,还有什么替代方案不包括在比赛中?我认为这就是问题所在,因为它会跳过下一个标记。

我会使用拆分方法:

var测试=[
“TAG1:asd asd测试TAG2:TEST”,
“TAG1:asd asd测试TAG2:test”,
“TAG1:asd asd测试TAG2:test TAG1:hello”
];
console.log(test.map)(函数(a){
返回a.split(/(TAG1 | TAG2):/);

}));我们可以尝试使用正则表达式拆分两次,一次获取所有标记及其值的数组,第二次填充2D数组

var input=“TAG1:asd asd测试TAG2:test TAG1:hello”;
var tags=input.split(/\s*(?=TAG)/);
var输出=[];
tags.forEach(函数(项、索引){
output.push(item.split(/:\s*/);
});

控制台日志(输出)
基于您的解决方案
“TAG1:asd asd testTAG2:TEST”.split(/\s*(?=TAG)/).map(t=>t.split(/:\s*/)
您的前瞻性想法也可以。