我在正则表达式中苦苦挣扎,该正则表达式从字符串中提取了一些组,但是它只能在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
感谢您的帮助。
答案 0 :(得分:1)
在JS中,您可以使用正则表达式,例如
(\w+)=(?:\[([^\][]*)]|'([^']*)')
请参见regex demo。
详细信息
(\w+)
-第1组:一个或多个单词字符=
-等号(?:\[([^\][]*)]|'([^']*)')
-
\[([^\][]*)]
-[
,第2组:除[
和]
然后是]
|
-或'([^']*)'
-'
,第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);
}