Как получить json из строки?

fantaghiro спросил: 28 марта 2018 в 03:52 в: regex

У меня есть эта строка:

"var block = new MatchesBlock('page_competition_1_block_competition_matches_summary_5', 'block_competition_matches_summary', {"page":0,"bookmaker_urls":{"13":[{"link":"http:\/\/www.bet365.com\/home\/?affiliate=365_178981","name":"Bet 365"}]},"block_service_id":"competition_summary_block_competitionmatchessummary","round_id":42011,"outgroup":false,"view":2,"competition_id":13});"

Я хочу получить:

{"page":0,"bookmaker_urls":{"13":[{"link":"http:\/\/www.bet365.com\/home\/?affiliate=365_178981","name":"Bet 365"}]},"block_service_id":"competition_summary_block_competitionmatchessummary","round_id":42011,"outgroup":false,"view":2,"competition_id":13}

, поэтому пишу:

MatchesBlock\(([^)]+)\)

, но это займет всю строку внутри MatchesBlock


3 ответа

Есть решение
Pedro Lobito ответил: 28 марта 2018 в 04:52
Для примера при условии, вы можете использовать:
{[^)]+

Demo

Jake Miller ответил: 28 марта 2018 в 04:06

Если вы хотите извлечь JSON только из параметров конструктора MatchesBlock, просто используйте следующее регулярное выражение:

\{(?:[^{}]|(?R))*\}

Входные данные:

var block = new MatchesBlock('page_competition_1_block_competition_matches_summary_5', 'block_competition_matches_summary', {"page":0,"bookmaker_urls":{"13":[{"link":"http:\/\/www.bet365.com\/home\/?affiliate=365_178981","name":"Bet 365"}]},"block_service_id":"competition_summary_block_competitionmatchessummary","round_id":42011,"outgroup":false,"view":2,"competition_id":13});

Вывод:

{"page":0,"bookmaker_urls":{"13":[{"link":"http:\/\/www.bet365.com\/home\/?affiliate=365_178981","name":"Bet 365"}]},"block_service_id":"competition_summary_block_competitionmatchessummary","round_id":42011,"outgroup":false,"view":2,"competition_id":13}
Sergio ответил: 28 марта 2018 в 04:26

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

MatchesBlock[^\{]+\K(.*})

Здесь я использую \K для сброса совпадение, т. е. все, что до \K не будет захвачено.

Jake Miller ответил: 28 марта 2018 в 04:04
Это не делает то, что он просил. Он НЕ хочет, чтобы MatchesBlock или другие параметры были записаны. Он хочет только JSON.
revo ответил: 28 марта 2018 в 04:30
Как вы узнали, что конечный вариант регулярного выражения OP поддерживает \K?
Sergio ответил: 28 марта 2018 в 04:42
Как вы правильно упомянули в другом комментарии, я бы предложил ОП опубликовать его / ее прогу. язык. OP может определить, поддерживается ли \K из этого поста: stackoverflow.com/questions/13542950/support-of-k-in- регулярное выражение
revo ответил: 28 марта 2018 в 04:42
OP сказал в своем комментарии, что он / она не может заставить это регулярное выражение работать. Если это регулярное выражение не работает для него / нее, то \K также не будет работать.