JavaScript - 如何使用正则表达式从响应中提取字符串 - keys/values?
JavaScript - How to extract strings - keys/values from response using RegEx?
我是正则表达式的新手,我想从 API 响应中提取一些数据。
我的 API 电话有回复:
{
server: 'nginx/1.21.0',
date: 'Mon, 25 Apr 2022 11:34:20 GMT',
'content-type': 'text/html; charset=UTF-8',
'transfer-encoding': 'chunked',
'x-powered-by': 'PHP/7.4.16',
expires: 'Sun, 19 Nov 1978 05:00:00 GMT',
'cache-control': 'no-store, no-cache, must-revalidate, max-stale=0, private, post-check=0, pre-check=0',
'x-content-type-options': 'nosniff',
'content-security-policy': "frame-ancestors 'self';",
'set-cookie': [
'SSESS8b04132f4690dc8ceb7837d5134a5519=ZbgVsmpp6DBRWwNCRMm5DTpfEoKffsNM7l8ILoCWkug; path=/; domain=test.net; secure; HttpOnly',
'su=1; expires=Thu, 22-Apr-2032 11:34:20 GMT; Max-Age=315360000; path=/; domain=test.net',
'lt=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT; Max-Age=0; path=/; test.net',
'dtCookie=v_4_srv_10_sn_6364C36040ADFF47B91A838BB8B2CADD_perc_100000_ol_0_mul_1_app-3Aea7c4b59f27d43eb_1; Path=/; Domain=test.net',
'870be6fb89fc78ad2ca0eca3828e3019=7055c78f3c2b7311a5c77934caad6939; path=/; HttpOnly; Secure; SameSite=None'
],
'x-oneagent-js-injection': 'true',
'x-ruxit-js-agent': 'true',
'server-timing': 'dtSInfo;desc="0", dtRpid;desc="493206686"',
connection: 'close'
}
我想提取 SSESS8b04132f4690dc8ceb7837d5134a5519 & ZbgVsmpp6DBRWwNCRMm5DTpfEoKffsNM7l8ILoCWkug ,每个 运行 都是不同的值。
我设法构建了一个捕获整个 key/value 的组,但是当我尝试安慰它时,它仍然不起作用。
https://regex101.com/r/2dKW4s/1
尝试 1 作为:
var matches1 = loginModern.headers.match(new RegExp("(SSESS.*)=(.+?);\s*path"));
console.log(matches1[2]);
result output: TypeError: loginModern.headers.match is not a function
尝试2:
const regex1 = new RegExp('(SSESS.*)=(.+?);\s*path');
var matches1 = regex1.exec(loginModern.headers)
console.log(matches1);
null
如何获取 SSESS8b04132f4690dc8ceb7837d5134a5519
& ZbgVsmpp6DBRWwNCRMm5DTpfEoKffsNM7l8ILoCWkug
从上面的回复中,考虑到他们正在改变变量?
感谢任何帮助
沙盒:https://codesandbox.io/s/jwdgmp
const setCookieArray = loginModern.headers["set-cookie"];
const stringContainingSSESS = setCookieArray.find((item) =>
item.includes("SSESS")
);
const matches = stringContainingSSESS.match(/(SSESS[a-zA-Z0-9]*)=(.+?);/);
console.log("key", matches[1]);
console.log("value", matches[2]);
我运行 regexp you provided against the loginModern.headers
and it had some issues matching up. This regexp更准确
我是正则表达式的新手,我想从 API 响应中提取一些数据。
我的 API 电话有回复:
{
server: 'nginx/1.21.0',
date: 'Mon, 25 Apr 2022 11:34:20 GMT',
'content-type': 'text/html; charset=UTF-8',
'transfer-encoding': 'chunked',
'x-powered-by': 'PHP/7.4.16',
expires: 'Sun, 19 Nov 1978 05:00:00 GMT',
'cache-control': 'no-store, no-cache, must-revalidate, max-stale=0, private, post-check=0, pre-check=0',
'x-content-type-options': 'nosniff',
'content-security-policy': "frame-ancestors 'self';",
'set-cookie': [
'SSESS8b04132f4690dc8ceb7837d5134a5519=ZbgVsmpp6DBRWwNCRMm5DTpfEoKffsNM7l8ILoCWkug; path=/; domain=test.net; secure; HttpOnly',
'su=1; expires=Thu, 22-Apr-2032 11:34:20 GMT; Max-Age=315360000; path=/; domain=test.net',
'lt=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT; Max-Age=0; path=/; test.net',
'dtCookie=v_4_srv_10_sn_6364C36040ADFF47B91A838BB8B2CADD_perc_100000_ol_0_mul_1_app-3Aea7c4b59f27d43eb_1; Path=/; Domain=test.net',
'870be6fb89fc78ad2ca0eca3828e3019=7055c78f3c2b7311a5c77934caad6939; path=/; HttpOnly; Secure; SameSite=None'
],
'x-oneagent-js-injection': 'true',
'x-ruxit-js-agent': 'true',
'server-timing': 'dtSInfo;desc="0", dtRpid;desc="493206686"',
connection: 'close'
}
我想提取 SSESS8b04132f4690dc8ceb7837d5134a5519 & ZbgVsmpp6DBRWwNCRMm5DTpfEoKffsNM7l8ILoCWkug ,每个 运行 都是不同的值。
我设法构建了一个捕获整个 key/value 的组,但是当我尝试安慰它时,它仍然不起作用。
https://regex101.com/r/2dKW4s/1
尝试 1 作为:
var matches1 = loginModern.headers.match(new RegExp("(SSESS.*)=(.+?);\s*path"));
console.log(matches1[2]);
result output: TypeError: loginModern.headers.match is not a function
尝试2:
const regex1 = new RegExp('(SSESS.*)=(.+?);\s*path');
var matches1 = regex1.exec(loginModern.headers)
console.log(matches1);
null
如何获取 SSESS8b04132f4690dc8ceb7837d5134a5519
& ZbgVsmpp6DBRWwNCRMm5DTpfEoKffsNM7l8ILoCWkug
从上面的回复中,考虑到他们正在改变变量?
感谢任何帮助
沙盒:https://codesandbox.io/s/jwdgmp
const setCookieArray = loginModern.headers["set-cookie"];
const stringContainingSSESS = setCookieArray.find((item) =>
item.includes("SSESS")
);
const matches = stringContainingSSESS.match(/(SSESS[a-zA-Z0-9]*)=(.+?);/);
console.log("key", matches[1]);
console.log("value", matches[2]);
我运行 regexp you provided against the loginModern.headers
and it had some issues matching up. This regexp更准确