Регулярное выражение поиска между фигурными скобками - PullRequest
0 голосов
/ 13 сентября 2018

У меня есть массивный массив, более 40 000 элементов - вместо того, чтобы зацикливаться на каждом элементе и проверять каждое свойство, я хотел сначала сериализовать массивный массив в виде строки.

А затем напишите простое регулярное выражение для сопоставления двух свойств объекта.

В КАЖДОМ отдельном объекте все они начинаются с ключа 'aaa' и значения true.

Существует множество пар ключ-значение, которые могут следовать, затем последняя пара ключ-значение на объекте - zzz: true.

var data = JSON.stringify([{
    aaa: true,
    some: 'cat goes meow',
    zzz: true
},{
    aaa: true,
    some: 'dog goes woof',
    zzz: true
}]);

Я в основном хочу, чтобы поисковый термин "собака" и регулярное выражение возвращали меня от aaa до zzz, где любое из значений между этими ключами соответствует запросу dog, в приведенном выше примере I ожидал получить последний элемент из массива.

Что я пробовал: https://regex101.com/r/yNSTs9/2

Ответы [ 2 ]

0 голосов
/ 13 сентября 2018

Я преобразовал ваш массив в строку и попытался найти данные, как вы хотите.

проверьте ниже регулярное выражение

regex - /([^\}\{])([^\}\{]*)(dog)([^\}\{]*)(\})/g

var results = '[{"aaa":true,"some":"cat goes meow","zzz":true},{"aaa":true,"some":"dog goes woof","zzz":true}]'.match(/([^\}\{])([^\}\{]*)(dog)([^\}\{]*)(\})/g);

console.log(results);
0 голосов
/ 13 сентября 2018

Попробуйте этот шаблон aaa.+(?=[^}]*dog[^}]*)[^}]+.

Пояснение:

aaa.+ соответствует aaa и хотя бы одному из любых символов до (?=[^}]*dog[^}]*), что означает позицию, которая предшествует любой строке, содержащей dog НО , не содержащей }, поэтому мы не перепрыгивайте на следующий объект (спасибо [^}]). Если утверждение верно (положительное совпадение), то сопоставляйте все до }: [^}]+.

Демо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...