'JavaScript - How to extract strings - keys/values from response using RegEx?

I am very new to regex, and I want to extract some data from API responses.

I have a response from my API call:

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

I want to extract SSESS8b04132f4690dc8ceb7837d5134a5519 & ZbgVsmpp6DBRWwNCRMm5DTpfEoKffsNM7l8ILoCWkug which are variables, and every single run that are different values.

I manage to construct a group that is capturing the whole key/value, but still when I try to console it, doesn't work.

https://regex101.com/r/2dKW4s/1

try1 as:

var matches1 = loginModern.headers.match(new RegExp("(SSESS.*)=(.+?);\s*path"));
console.log(matches1[2]);
    
result output: TypeError: loginModern.headers.match is not a function

try2:

const regex1 = new RegExp('(SSESS.*)=(.+?);\s*path');
var matches1 = regex1.exec(loginModern.headers)
console.log(matches1);

null

How to fetch SSESS8b04132f4690dc8ceb7837d5134a5519 & ZbgVsmpp6DBRWwNCRMm5DTpfEoKffsNM7l8ILoCWkug from the above response, having in mind they are changing variables?

Any help is appreciated



Solution 1:[1]

Sandbox: 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]);

I ran the regexp you provided against the loginModern.headers and it had some issues matching up. This regexp is more accurate

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1