我一直在研究用于 url 查询的解析器,但我很困惑为什么正则表达式在通过regex101.com 进行测试期间工作时不正确,或者至少我认为是这样,这是一个深夜编码;问题:UnhandledPromiseRejectionWarning: SyntaxError: Invalid regular expression: /\?(?<query>.*)/: Invalid group const results = url.match(/\?(?<query>.*)/); if (!results) { return {}; } const { groups: { query } } = results; const pairs = query.match(/(?<param>\w+)=(?<value>\w+)/g); const params = pairs.reduce((acc, curr) => { const [key, value] = curr.split(("=")); acc[key] = value; return acc; }, {}); return params;
1 回答
神不在的星期二
TA贡献1963条经验 获得超6个赞
命名捕获组仅在 Node 10+ 中受支持。您需要更新您的节点版本。(低于 10 的节点版本非常旧,即使不是因为这个问题,更新也是个好主意)
如果出于某种原因不允许您这样做,您可以将其设为普通捕获组而不是命名捕获组:
/\?(.*)/
然后从匹配 ( [1]
) 中提取第一组。从查询字符串中提取对也是如此。
在现代版本的 Node 上,您还可以使用更语义化的Object.fromEntries
而不是reduce
:
const params = Object.fromEntries( pairs.map(pair => pair.split('=')) );
添加回答
举报
0/150
提交
取消