Регулярное выражение, если вторым параметром является Enrollment - PullRequest
0 голосов
/ 27 августа 2018

у меня ниже ответ

{
      "id": "3452",
      "enrollable_id": "3452",
      "enrollable_type": "Enrollment"
}
{
      "id": "3453",
      "enrollable_id": "3453",
      "enrollable_type": "Task"
}
{
      "id": "3454",
      "enrollable_id": "3454",
      "enrollable_type": "Enrollment"
}
{
      "id": "3455",
      "enrollable_id": "3455",
      "enrollable_type": "Task"
}

Я хотел бы получить идентификатор [3452 и 3454], только если enrollable_type = Enrollment. Это для экстрактора регулярных выражений jmeter, поэтому было бы здорово, если бы я мог использовать одно регулярное выражение для выборки 3452 и 3454.

Ответы [ 4 ]

0 голосов
/ 28 августа 2018

Вы можете извлечь данные двумя способами

  1. Использование Json Extractor .

Для извлечения данных с использованием json экстрактора данные ответа должны соответствовать правилам синтаксиса json,

Чтобы извлечь данные, используйте следующий путь JSON в экстракторе json

$..[?(@.enrollable_type=="Enrollment")].id

и используйте номер совпадения -1, как показано ниже

enter image description here

  1. Для извлечения данных с помощью экстрактор регулярных выражений используйте следующее регулярное выражение

id": "(.+?)",\s*(.+?)\s*"enrollable_type": "Enrollment

template : $1$2$3$4$
Match no -1

как показано ниже

enter image description here

вы можете видеть переменные, сохраненные с помощью отладочного сэмплера enter image description here

Дополнительная информация

извлечение переменных

0 голосов
/ 27 августа 2018

RegEx, который вы ищете:

_id":\s*"([^"]+(?=[^\0}]+_type":\s*"E))

Попробуйте онлайн!


Объяснение

_id":\s*"                                Finds the place where the enrollment_id is
          [^"]+(?=                       Matches the ID if:
                  [^\0}]+_type":\s*      Finds the place where enrollable_type is
                                   "E    Checks if the enrollable type begins with an uppercase E
                                     )   End if
         (                            )  Captures the ID

Важно отметить, что этот RegEx будет соответствовать действительным людям и захватывать действительным ID . Это означает, что вам нужно будет получать захват каждого матча, а не просто получать каждый матч.


Ответственность

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

Это RegEx со всеми необходимыми для выхода символами:

_id":\\s*"([^"]+(?=[^\\0}]+_type":\\s*"E))
0 голосов
/ 28 августа 2018

Ваш ответ, кажется, JSON (однако он искажен). Если это так, и это действительно JSON - я бы рекомендовал вместо этого использовать JSON Extractor , поскольку регулярные выражения хрупки, чувствительны к изменению разметки, новым строкам, порядку элементов и т. Д., А JSON Extractor рассматривает только содержимое.

Соответствующий запрос JSON Path будет выглядеть примерно так:

$..[?(@.enrollable_type == 'Enrollment')].enrollable_id

Демо-версия:

JMeter JSON Extractor Conditional Select

Дополнительная информация: Плагин JMeter Path Extractor - Сценарии расширенного использования

0 голосов
/ 27 августа 2018

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

"(\d+)"\s*,\s*(?="enrollable_type":\s*"Enrollment")

Предполагается, что entrollable_type всегда следует за enrollable_id и что все указано в кавычках с небольшим учетом дисперсии в пустом пространстве. Вы должны быть в состоянии обрабатывать немного больше отклонений, если это необходимо, например, если вы не уверены, можете ли вы зависеть от ключей или данных, которые цитируются (["']?). Однако, если вы можете зависеть от порядка свойств (например, если они вводятся перед идентификатором), вам следует отказаться от использования регулярного выражения.

Вот пример работы в JavaScript

const text = `{ "id": "3452", "enrollable_id": "3452", "enrollable_type": "Enrollment" } { "id": "3453", "enrollable_id": "3453", "enrollable_type": "Task" } { "id": "3454", "enrollable_id": "3454", "enrollable_type": "Enrollment" } { "id": "3455", "enrollable_id": "3455", "enrollable_type": "Task" }`;

const re = /"(\d+)"\s*,\s*(?="enrollable_type":\s*"Enrollment")/g;
var match; 
while(match = re.exec(text)) {
  console.log(match[1]);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...