我正在尝试捕获花括号内的键:值对。对于以下字符串,它应该返回类似k2:v2和k3:v3 的内容
Str = “k1:v1abc{k2:v2,k3:v3}{test}”
我有以下正则表达式,它们分别捕获了我需要的内容,但我不知道如何将它们组合在一起。
/(w+):(w+)/g
>gt>捕获密钥:值/{.*?}/g
>gt>捕获{}之间的所有内容
如果您的环境支持lookbacking断言中的量词:
(?<={[w:,]*)w+:w+(?=[w:,]*})
模式匹配:
(?<={[w:,]*)
正向查找,断言{
和左侧允许字符的可选重复w+:w+
匹配1+个字符:
和1+个字字符(?=[w:,]*})
正向前瞻,断言右侧允许的字符和}
的可选重复
查看regex演示。
const str = "k1:v1abc{k2:v2,k3:v3}{test}";
const regex = /(?<={[w:,]*)w+:w+(?=[w:,]*})/g;
console.log(str.match(regex));
另一种方法可以使用两次传递,首先匹配格式并获取捕获组中大括号之间的部分。
如果匹配,请用逗号分隔组1。
{(w+:w+(?:,w+:w+)*)}
模式匹配:
{
比赛开场{
(
捕获组1w+:w+
匹配1+个单词字符:
和1+个字符(?:,w+:w+)*
可选地重复,
和相同的先前模式
)
}
比赛结束}
const str = "k1:v1abc{k2:v2,k3:v3}{test}";
const regex = /{(w+:w+(?:,w+:w+)*)}/;
const m = str.match(regex);
if (m) console.log(m[1].split(","));