захватить вхождение группы регулярных выражений в строку - PullRequest
1 голос
/ 03 июня 2019

Я борюсь с регулярным выражением, которое извлекает некоторые группы из строки, но оно извлекает только две последние группы либо в 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 Ответ

1 голос
/ 03 июня 2019

В JS вы можете использовать регулярные выражения, такие как

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

См. Демоверсию regex .

Детали

  • (\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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...