请求报文通过的正则表达提取信息,史上最难正则表达式

问题遇到的现象和发生背景

请求报文通过正则表达式提取信息

用代码块功能插入代码,请勿粘贴截图

请求报文:

POST /install/index.php?step=3&testdbpwd=1

Host: chidaoshop.top

User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.114 Safari/537.36 Edg/103.0.1264.49

Connection: keep-alive

Content-Length: 95

Accept: application/json, text/javascript, */*; q=0.01

X-Requested-With: XMLHttpRequest

Content-Type: application/x-www-form-urlencoded; charset=UTF-8

Origin: http://www.chidaoshop.top

Accept-Encoding: gzip, deflate

Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6

Referer: chidaoshop.top

Cookie: s0370d8c2=7usiqtl9mkm44kc7k5k85ga6j2;

dbHost=localhost&dbUser=hpq310bd65.bt&dbPwd=fp02m9&dbName=hpq310bd65.bt@localhost&dbport=3306

正则表达表达式规则:

  1. 请求的url /最后一串
  2. 请求的参数的key
运行结果及报错内容

解析结果:
index.phpsteptestdbpwddbHostdbUserdbPwddbNamedbport

既然是前端配合JS就非常简单了,当然一句正则也是可以完成的,考虑到JS的正则不支持递归写成一句太过复杂,就拆成两句正则

var 欲查找文本  = "POST /install/index.php?step=3&testdbpwd=1\n\n \n\nHost: chidaoshop.top\n\n \n\nUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.114 Safari/537.36 Edg/103.0.1264.49\n\n \n\nConnection: keep-alive\n\n \n\nContent-Length: 95\n\n \n\nAccept: application/json, text/javascript, */*; q=0.01\n\n \n\nX-Requested-With: XMLHttpRequest\n\n \n\nContent-Type: application/x-www-form-urlencoded; charset=UTF-8\n\n \n\nOrigin: http://www.chidaoshop.top\n\n \n\nAccept-Encoding: gzip, deflate\n\n \n\nAccept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6\n\n \n\nReferer: chidaoshop.top\n\n \n\nCookie: s0370d8c2=7usiqtl9mkm44kc7k5k85ga6j2;\n\n \n\ndbHost=localhost&dbUser=hpq310bd65.bt&dbPwd=fp02m9&dbName=hpq310bd65.bt@localhost&dbport=3306\n\n \n\n";
var 全文匹配规则 = /^.+\/(.+)\?([^\n]+)[\s\S]+\nCookie:.+[\s]+([^\n]+)/;
var 键匹配规则 = /[^&]+?(?==)/g;
var 结果集 = 欲查找文本.match(全文匹配规则);
var 最后一串 = 结果集[1];
var 参数键名集1 = 结果集[2].match(键匹配规则).toString().replace(/,/g,"");
var 参数键名集2 = 结果集[3].match(键匹配规则).toString().replace(/,/g,"");
var 运行结果 = 最后一串 + 参数键名集1 + 参数键名集2;
console.log(运行结果);

得出结果

index.phpsteptestdbpwddbHostdbUserdbPwddbNamedbport