postman脚本使用正则提取变量

遇到的坑

假设接口resp响应如下,我们要提取里面的sessionId ,因为resp里面包含\字符。所以需要在\前面加\形成\\才能正确提取

{
  "status": "success",
  "data": "{\"title\":\"\",\"sessionName\":\"zentaosid\",\"sessionID\":\"qr4taa6q43evbder1iistqre5u\",\"rand\":100,\"pager\":null}",
  "md5": "4a199d04a0a2df3376e67213957a1347"
}

使用字面量正则提取

/"sessionID\\":\\"(.*?)\\"/

resp = pm.response.text();
console.log("提取的resp为:",resp);
sessionId = resp.match(/"sessionID\\":\\"(.*?)\\"/)[1];
// 设置为全局变量
pm.globals.set("ssesionId", sessionId);
console.log("提取的sessionId为:",sessionId);

使用构造函数正则

sessionID\\\\":\\\\"(.*?)\\\\"

resp = pm.response.text();
console.log("提取的resp为:",resp);
pt = new RegExp('sessionID\\\\":\\\\"(.*?)\\\\",');
console.log("正则为:",pt.toString());
sessionId = resp.match(pt)[1];
pm.globals.set("ssesionId", sessionId);
console.log("提取的sessionId为:",sessionId);

后记

MDN上说:

当使用构造函数创造正则对象时,需要常规的字符转义规则(在前面加反斜杠 \)。

以下是等价的

var re = new RegExp("\\w+");
var re = /\w+/;

就是说如果使用了元字符

比如 \W、\S之类的

字面量正则里面不需要加\转义,比如:/\w+/,构造函数就需要写成这种:

pattern  = new RegExp("\\w+")

但如果正则里面包含$, (, ), *, +, ., [, ], ?, \, ^, {, }, |。则

  • 字面量正则需要加\转义。如/"sessionID\\":\\"(.*?)\\"/
  • 构造函数正则需要加\\\,也就是三个\

因为

pattern = new RegExp('sessionID\\\\":\\\\"(.*?)\\\\",')
pattern_str = pattern.toString()

// 输出结果为
/sessionID\\":\\"(.*?)\\"/

而字符串的match函数接受的是一个字面量正则,如果你写成

pattern = new RegExp('sessionID\\":\\"(.*?)\\",')

pattern.toString()后会是/sessionID\":\"(.*?)\"/,匹配结果为null。


在postman中使用正则提取变量,如果你的接口响应里存在转义字符,还是使用字面量正则好一些。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值