Регулярное выражение для огромной строки

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

"\n  - MyLibrary1 (= 0.10.0)\n  - AFNetworking (= 1.1.0)\n  - MyLibrary2 (= 3.0.0)\n  - Objective-C-HMTL-Parser (= 0.0.1)\n\n"

Я хочу создать JSON, как это:

{
"MyLibrary1": "0.10.0",
"AFNetworking": "1.1.0",
"MyLibrary2": "3.0.0",
"Objective-C-HMTL-Parser": "0.0.1"
}

Для которого мне нужно разделить "MyLibrary1" и "0.10.0" и аналогично другим данным, чтобы создать строку. Я работаю над регулярным выражением, чтобы отделить данные от строки.

Я старался /-(.*)/ а также /=(.*)/ но это возвращает мне все после - а также =,

Есть ли способ получить необходимые данные с помощью одного регулярного выражения? Также, как я могу дать регулярному выражению знать, что он должен остановиться на ( или же ), Я использую Rubular для проверки этого и всякий раз, когда я печатаю ( или же ) Я получаю "У вас есть непревзойденные скобки".

3 ответа

Решение

Вы можете использовать следующее регулярное выражение.

-\s*(\S+)\s*\(\s*=\s*(\S+)\s*\)

Ваши ключевые результаты матча будут в группе захвата #1 и значение совпадения результатов будет в группе #2

Rubular

Кажется, работать с вашим образцом.

 # -\s*(.*?)\s*\(\s*=\s*(.*?)\s*\)

 -
 \s* 
 ( .*? )        # (1)
 \s* 
 \(
 \s* 
 =
 \s* 
 ( .*? )        # (2)
 \s* 
 \)

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

 # -\s*([^()=]*?)\s*\(\s*=\s*([^()=-]*?)\s*\)

 -
 \s* 
 ( [^()=]*? )  # (1)
 \s* 
 \(
 \s* 
 =
 \s* 
 ( [^()=-]*? )  # (2)
 \s* 
 \)
-\s{1}([A-Za-z0-9]+)\s+\(=\s+([0-9\.]+)\)

Вернем матчи:

$ 1 AFNetworking $ 2 1.1.0

так далее...

Rubular

Другие вопросы по тегам