regex 使用多个Cookie拆分Set-Cookie标头

jxct1oxe  于 2023-08-08  发布在  其他
关注(0)|答案(2)|浏览(148)

我正在使用无服务器框架(JavaScript),它要求我将单个Set-Cookie拆分为一个cookie数组,以便在客户端上正确设置。为什么?不知道,但这似乎是怎么回事。
我无法访问生成Set-Cookies字符串的代码,因此必须手动将其拆分为一个数组。
我的字符串看起来像这样:

cookie1=value, cookie2=value2; Expires=Thu, 06 Jul 2023 14:45:25 GMT;

字符串
你可能已经猜到我的问题了,如果我执行string.split(', '),我的字符串会被分成三部分:

  1. cookie1=value
  2. cookie2=value2; Expires=Thu
  3. 06 Jul 2023 14:45:25 GMT;
    我在谷歌上搜索过,但在任何地方都找不到现有的答案。我知道我可能可以用Regex解决这个问题,但它太复杂了,我无法弄清楚。
ffscu2ro

ffscu2ro1#

你可以试试这个:

let aList = [];
let s = 'cookie1=value, cookie2=value2; Expires=Thu, 06 Jul 2023 14:45:25 GMT;'
for (const match of s.matchAll(/cookie\d+=([^;,]+)(?:,|;)/g)) {
      console.log(`matched: ${match[1]}`);
      aList.push(match[1])
} 
console.log(aList)
//(2) ['value', 'value2']

字符串
第一部分匹配cookie单词,后跟数字和等号。捕获与一个或多个非分号或逗号字符匹配的组。它捕获cookie的值。

flvlnr44

flvlnr442#

在尝试了一些建议后,我碰巧发现了getSetCookie() method on mdn
由于某些原因,这不是在Headers类中输入的,但它确实工作。
所以如果你的响应返回一个header Object,你可以把它传递给header类,然后使用内置的方法。

const headers = new Headers(res.headers);
const setCookies = headers.getSetCookie()
console.log(setCookies)
// ["cookie1=value", "cookie2=value2; Expires=Thu, 06 Jul 2023 14:45:25 GMT;"

字符串
根据您正在做的事情,您的响应可能已经返回了作为Headers示例的头,因此请注意这一点。

相关问题