首页 > 解决方案 > 正则表达式匹配和分组直到一个字符序列

问题描述

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

一些例子是:

"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"]]

有什么替代方案包括在比赛中?我认为这就是问题所在,因为它会跳过下一个标签。

标签: javascriptregex

解决方案


我会使用拆分方法:

var test = [
    "TAG1: asd asd testTAG2:TEST",
    "TAG1:asd asd test TAG2:TEST",
    "TAG1: asd asd test TAG2:TEST TAG1:hello"
];
console.log(test.map(function (a) {
  return a.split(/(TAG1|TAG2):/);
}));


推荐阅读