给出以下测试字符串
zoo @foo [bar, baz, boo] moo @too [bee, zee].
我想提取JSON
{
foo: [bar, baz, boo],
too: [bee, zee]
}
但是我在Javascript中正在使用正则表达式。
我可以完全匹配sq括号中的字符串或者第一个和最后一个。有人可以帮忙吗?
答案 0 :(得分:1)
尝试
/@(\w+)\s+(\[[^\]+])/g
将匹配@<word>
,一个空格,然后是括号内的任何内容。如果您对括号中的内容更加挑剔,可以将[^\]]
替换为[,\s\w]
之类的内容。在循环中运行.exec
,直到得到null结果:
var res;
while( res = regex.exec( str ) ){
// res[1] == name
// res[2] == brackets
}
您可以从中生成所需的任何JSON,或按原样使用它。
答案 1 :(得分:1)
试试这个,
var regex = /@(\w+)\s+(\[[^\]]+\])/,
orig = "zoo @foo [bar, baz, boo] moo @too [bee, zee]",
curString = orig,
match,
result = {},
index;
while(match = curString.match(regex)) {
result[match[1]] = match[2];
index = curString.indexOf(match[2])
curString = curString.substring(index + match[2].length);
}
我所采取的假设是字符串可以有多个@foo标记,没有正常的正则表达式可以提取多个匹配。您需要迭代字符串,直到找不到更多匹配项
如果您需要字符串格式,可以使用
JSON.stringify(res);