正则表达式如果第二个参数是Enrollment

时间:2018-08-27 19:48:45

标签: regex jmeter

我的回应如下

{
      "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"
}

仅当enrollable_type =注册时,我才想获取ID [3452和3454]。这是用于jmeter正则表达式提取器的,因此,如果我仅能使用一个线性正则表达式来提取3452和3454,那就太好了。

4 个答案:

答案 0 :(得分:1)

仅使用正则表达式来解析结构化数据通常是一个坏主意,但是如果您打算采用这种方法,那么请执行以下操作:

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

这假设entrollable_type始终跟随enrollable_id,并且所有引用均一致,并留有一点空白。如有必要,您应该能够处理更多的差异,例如,如果不确定是否可以依赖键或引用的数据(["']?)。但是,如果您可以依赖属性的顺序(例如,如果键入的类型位于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]);
}

答案 1 :(得分:1)

您要查找的RegEx是:

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

Try it online!


说明

_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))

答案 2 :(得分:0)

您的回复似乎是JSON的回复(但是格式错误)。如果是这种情况,并且确实是JSON,我建议您改用JSON Extractor,因为正则表达式易碎,对标记更改,换行,元素顺序等敏感,而JSON Extractor仅查找内容。

相关的JSON Path query类似于:

NULL

演示:

JMeter JSON Extractor Conditional Select

更多信息:JMeter's JSON Path Extractor Plugin - Advanced Usage Scenarios

答案 3 :(得分:0)

您可以通过两种方式提取数据

  1. 使用Json Extractor

要使用json提取器提取数据,响应数据应遵循json语法规则,

要提取数据,请在json提取器中使用以下JSON路径

$ mcs -out:PrintPrimes PrintPrimes.cs
$ ./PrintPrimes
2 
3 
5 
7 
11 
13 
17 
19 

并使用匹配号$..[?(@.enrollable_type=="Enrollment")].id ,如下所示

enter image description here

  1. 要使用regular expression extractor提取数据,请使用以下正则表达式

-1

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

如下所示

enter image description here

您可以看到使用调试采样器存储的变量 enter image description here

更多信息

extract variables