Javascript 如何从JSON字符串中检索多个属性值

Javascript 如何从JSON字符串中检索多个属性值,javascript,json,regex,grouping,extract,Javascript,Json,Regex,Grouping,Extract,我有一个JSON字符串: x = '{"userId":"foo","traits":{"email":"foo@foobar.com"},"type":"identify"}' 我想从中获得某些值。我试过正则表达式: 到目前为止我有 anonId = x.match(/\"anonymous_id\"\:(.*?)/)?[1] email = x.match(/\"email\"\:\"(.*?)\"/)?[1] userId = x.match(/\"userId\"\:\"(.*?)\"

我有一个JSON字符串:

x = '{"userId":"foo","traits":{"email":"foo@foobar.com"},"type":"identify"}'
我想从中获得某些值。我试过正则表达式:

到目前为止我有

anonId = x.match(/\"anonymous_id\"\:(.*?)/)?[1]
email = x.match(/\"email\"\:\"(.*?)\"/)?[1]
userId = x.match(/\"userId\"\:\"(.*?)\"/)?[1]
type = x.match(/\"type\"\:\"(.*?)\"/)?[1]
这既丑陋又低效,但当我尝试将它们结合起来时:

[_, a, b, c, d] = x.match(/\"anonymous_id\"\:(.*?)|\"userId\"\:(.*?)|\"email\"\:(.*?)|\"type\"\:(.*?)/g)
返回的结果是整个组,而不仅仅是匹配的部分

我希望a,b,c,d等于键的值,但是我得到:

Wanted:
**>> ["foo","foo@foobar.com","identify"]**
Actual results:
>> ["userId":"foo","email":"foo@foobar.com","type":"identify"]
有没有办法在一行正则表达式中实现这一点

---乌德帕特----

我最后和你一起去了

  rxp = /\"user_id\"\:\"(.*?)\"|\"anonymous_id\"\:\"(.*?)\"|\"type\"\:\"(.*?)\"/g

  anonId = null
  userId = null
  type = null

  while (arr = rxp.exec(bdy)) isnt null
    userId = arr[1] if arr[1]
    anonId = arr[2] if arr[2]
    type = arr[3] if arr[3]
FWIW我避免使用JSON.parse,因为我正在处理数千个这样的文件,因为我只需要一小部分,我不希望JSON.parse的速度太慢对服务器造成不必要的影响

try {
   var parsed = JSON.parse(x);
   anonId = parsed.anonymous_id;
} catch (ex) {
  //invalid json
}

除非输入了无效的JSON,否则这应该是可行的。然后您可能想考虑正则表达式,但即使这样,您也可能需要查看模板。

< P>尝试使用<代码> ReXEP < /COD> <代码> /[A-z@.]+(?=”,|“})/ig在单个调用
.match()

var x='{“userId”:“foo”,“traits”:{“email”:foo@foobar.com“}”,类型“:“标识”}”;
var res=x.match(/[a-z@.]+(?=”,|“})/ig);

控制台日志(res)
为什么不能使用
JSON.parse()
并通过迭代查找值?您的问题标题
Javascript match提取多个值字符串
,这与您实际要求的内容几乎没有关系。你能改进吗?@RokoC.Buljan我不知道如何准确地表达它,尽管你甚至不需要在执行
JSON.parse
后进行迭代,但我愿意接受建议。您只需使用
obj.prop
访问相关属性即可;你测试过了吗?事实上,JSON解析器通常相当快。无论如何,如果您对自己的问题有“答案”,请将其作为答案添加,而不是作为问题的一部分。@RokoC.Buljan请参阅更新的帖子。应匹配处对象属性的所有值OP@guest271314你的回答非常接近我需要的,谢谢!不幸的是,您的函数会根据所提供数据的顺序返回值,我无法真正知道哪个值是userId、email等,因为数据不是来自我可以控制的东西。您为什么建议使用regexp解析JSON是个谜。@torazaburo“你为什么建议用regexp解析JSON是个谜”这是问题的要求;请参阅“有没有办法在一行regex中实现这一点?”你会如何回答一个问题,即用哪种枪射中自己的头部?