Regex для поиска строки между шаблонами, не содержащей конкретной строки - PullRequest
0 голосов
/ 21 сентября 2019

Хорошо, гуру, допустим, у меня есть следующая строка:

{
"event" : "party" ,
"Id" : "store" ,
"timestamp" : "2019-07-07T13:14:26.329Z" ,
"localDateTime" : "2019-07-07T16:14" ,
"orderStateUpdate" : {
"id" : "fj09bA9ywfGS" ,
"orderId" : "2315043" ,
"visitId" : "2315043" ,
"items" :{{
"id" : "fj09bA6K3K8u" ,
"quantity" : 1 ,
"stat" : "ok"
},
{
"id" : "fj09bA6K3K8u2" ,
"quantity" : 2 ,
"stat" : "ok"
}}
,
"items" :{{
"id" : "fj09bA6K3K8u" ,
"quantity" : 1 ,
"stat" : "junk"
},
{
"id" : "fj09bA6K3K8u2" ,
"quantity" : 2 ,
"stat" : "ok"
}}
,
"extraParams" : {"extraparamstuff1":"bugger"},"somethingelse" :"blahblahblah"
}}

Строка имеет два (вложенных массива), обернутых двойными фигурными скобками.Эта строка содержит ошибку, в которой LAST-фигурная скобка ТАКЖЕ двойная;то, что я пытаюсь захватить с помощью регулярных выражений, это строка, которая начинается с '}}', заканчивается на '}}' и НЕ СОДЕРЖИТ '{{' вроде так:

}}
,
"extraParams" : {"extraparamstuff1":"bugger"},"conversationLink" :"https://qa.app.package.ai/qa/#/app/dashboard?d=1561248000000&c=fdxkID9IifGv&p=fdxfaFgV1l1Y"
}}

У меня вызов в Regex, но придумали это:

(?:(\}\})).*(?:\{\{).*(?:\}\s*?\})

, который захватывает

}}
,
"items" :{{
"id" : "fj09bA6K3K8u" ,
"quantity" : 1 ,
"itemState" : "LOADED"
},
{
"id" : "fj09bA6K3K8u2" ,
"quantity" : 2 ,
"itemState" : "LOADED2"
}}
,
"extraParams" : {"extraparamstuff1":"bugger"},"conversationLink" :"https://qa.app.package.ai/qa/#/app/dashboard?d=1561248000000&c=fdxkID9IifGv&p=fdxfaFgV1l1Y"
}}

, что слишком много.Может кто-нибудь помочь мне понять, как это найти?Это для проверки входящих данных (и да, мне также нужно проверить наличие дополнительных открытий '{{').

1 Ответ

0 голосов
/ 21 сентября 2019

Хорошо, я думаю, вам нужен отрицательный прогноз , поскольку вы должны принимать фигурные скобки, но не двойные ... это то, что я придумал, не уверен, сработает ли этохотя в каждом случае.

}}([^{]|{(?!{))+}}

В основном говорится: ищите две закрывающие фигурные скобки (}}), затем любой не открывающийся фигурный символ ([^{]) ИЛИ aодиночный открывающий фигурный символ (с использованием отрицательного взгляда) ({(?!{)), повторяйте это столько раз, сколько необходимо (+), и заканчивайте двойным закрывающим фигурным символом (}})

Ссылка на прямую (обновляемый) демо: https://regex101.com/r/kwlzco/2

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