猿问

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

我正在努力使用从字符串中提取一些组的正则表达式,但它只在 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


并感谢您的帮助。


婷婷同学_
浏览 132回答 1
1回答

Helenr

在 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);}
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答