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

时间:2019-06-03 09:55:24

标签: javascript regex

我在正则表达式中苦苦挣扎,该正则表达式从字符串中提取了一些组,但是它只能在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 个答案:

答案 0 :(得分:1)

在JS中,您可以使用正则表达式,例如

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

请参见regex demo

详细信息

  • (\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);
}