为了账号安全,请及时绑定邮箱和手机立即绑定

捕获字符串中出现的正则表达式组

捕获字符串中出现的正则表达式组

婷婷同学_ 2021-06-12 15:00:38
我正在努力使用从字符串中提取一些组的正则表达式,但它只在 javascript 中提取最后两个组:^{((\w+=[^=]+)\s*,\s*)*(\w+=[^=]+)}$我想要的只是在中间得到两个带有等号的部分,在每组之后它们是一个逗号字符串:{type='OGONE'} {type=['OGONE'], period=['2018','2019']}{type=['OGONE'], period='2018', names=['yoeunes']}{type='OGONE', period=['2018','2019'], names=['sara','hamza'], ages=[20, 21]}https://regex101.com/r/lGgMfM/1并感谢您的帮助。
查看完整描述

1 回答

?
Helenr

TA贡献1780条经验 获得超3个赞

在 JS 中,你可以使用像这样的正则表达式

(\w+)=(?:\[([^\][]*)]|'([^']*)')

请参阅正则表达式演示

细节

  • (\w+) - 第 1 组:一个或多个字字符

  • = - 一个等号

  • (?:\[([^\][]*)]|'([^']*)') - 任何一个

    • \[([^\][]*)][,组2:比其他任何0+字符[]]

    • | - 或者

    • '([^']*)'', 第 3 组:除',之外的任何 0+ 个字符'

一个JS演示:

var strs = ["{type='OGONE'}", "{type=['OGONE'], period=['2018','2019']}", "{type=['OGONE'], period='2018', names=['yoeunes']}", "{type='OGONE', period=['2018','2019'], names=['sara','hamza'], ages=[20, 21]}]"];

var rx = /(\w+)=(?:\[([^\][]*)]|'([^']*)')/g;

for (var s of strs) {

  var results=[], m;

  console.log("STRING:", s);

  while(m=rx.exec(s)) {

    if (m[2]) {

      results.push([m[1], m[2]]);

    } else {

      results.push([m[1], m[3]]);

    }

  }

  console.log("RESULTS:", results);

}


查看完整回答
反对 回复 2021-06-18
  • 1 回答
  • 0 关注
  • 124 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信