You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在JMeter中使用单个正则表达式提取多个标签值

用单个正则表达式捕获多个响应值并传递到下一个请求

嘿,这个场景太常见了!要从你给出的响应里一次性抓出<id>和<Clientno>的值,用带捕获组的正则表达式就能轻松搞定,不管你用Postman、JMeter还是其他接口测试工具,核心思路都是一致的。

第一步:编写匹配多个值的正则表达式

针对你的响应示例:

583839

return (<Clientno>543</Clientno>)

你可以用这个正则:

<id>(\d+)</id>.*<Clientno>(\d+)</Clientno>

我给你拆解下这个正则的作用:

  • <id>(\d+)</id>:精准匹配<id>标签,括号里的(\d+)是第一个捕获组,专门提取标签里的数字值
  • .*:匹配两个标签之间的任意内容(包括空格),确保能覆盖标签间的所有间隔
  • <Clientno>(\d+)</Clientno>:匹配<Clientno>标签,括号里的(\d+)是第二个捕获组,提取对应的数字值

如果你的响应里标签之间可能有换行,记得给正则加上单行模式(比如JavaScript里用/<id>(\d+)</id>.*<Clientno>(\d+)</Clientno>/s,JMeter里勾选「单行」选项),这样.*就能匹配换行符了。

第二步:提取捕获组的值并传递

不同工具的具体实现略有不同,我给你举两个最常用的例子:

例1:Postman中使用

在请求的「Tests」标签里写这段代码,把捕获到的值存到环境变量里:

// 获取响应文本
const responseText = pm.response.text();
// 定义正则表达式
const regexPattern = /<id>(\d+)</id>.*<Clientno>(\d+)</Clientno>/s;
// 执行匹配
const matchResult = responseText.match(regexPattern);

if (matchResult) {
    // 把捕获到的id存到环境变量
    pm.environment.set("targetId", matchResult[1]);
    // 把捕获到的Clientno存到环境变量
    pm.environment.set("targetClientNo", matchResult[2]);
}

之后下一个请求直接用{{targetId}}和{{targetClientNo}}就能调用这些值了。

例2:JMeter中使用

添加「正则表达式提取器」后,按以下配置填写:

  • 引用名称:随便起个名字,比如responseValues
  • 正则表达式:<id>(\d+)</id>.*<Clientno>(\d+)</Clientno>
  • 模板:$1$$2$($1$对应第一个捕获组,$2$对应第二个)
  • 匹配数字:1(表示取第一个匹配结果)

配置完成后,你可以用${responseValues_g1}调用id值,用${responseValues_g2}调用Clientno值。

内容的提问来源于stack exchange,提问作者Subodhya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 09:42:50