正则表达式Javascript匹配推特用户名和一些额外的信息

时间:2014-04-28 03:31:25

标签: javascript regex

给出以下测试字符串

zoo @foo [bar, baz, boo]  moo @too [bee, zee].

我想提取JSON

{
    foo: [bar, baz, boo],
    too: [bee, zee]
}

但是我在Javascript中正在使用正则表达式。

我可以完全匹配sq括号中的字符串或者第一个和最后一个。有人可以帮忙吗?

2 个答案:

答案 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);