考查候选人正则基本功的面试题之《解析URL请求参数》

本文涉及的产品
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
全局流量管理 GTM,标准版 1个月
简介: 考查候选人正则基本功的面试题之《解析URL请求参数》

需求描述

有一个字符串请求URL,我们需要将该字符串形式的URL中的请求参数转换为对象,相同key的value以数组形式进行呈现,没有value属性的参数,将value置为true。

目标字符串

http://www.getui.com?user=superman&id=345&id=678&user=superman2

实现函数

function parseParam(url) {
    // 1. 将问号后面的字符提取出来
    const paramStr = /.+\?(.+)$/.exec(url)[1];
    // 2. 使用&分割字符串
    const paramArr = paramStr.split('&');
    // 3. 创建要返回的对象
    const paramObj = {};
    // 4. 将每一个param存到对象中
    for (let v of paramArr) {
        // 5. 分为有等号还是没有等号两种情况
        if (/=/.test(v)) {
            // 有等号
            // 将等号分割为key和value
            let [key,value] = v.split('=');
            // 对value进行解码
            value = decodeURIComponent(value);
            // 如果是数字字符串就将其转换为浮点数
            value = /^\d+$/.test(v) ? parseFloat(value) : value;
            // 判断要返回的对象中是否已经有了相同的key,有则添加,没有则赋值
            if (paramObj.hasOwnProperty(key)) {
                paramObj[key] = [].concat(paramObj[key],value);
            } else {
                paramObj[key] = value;
            }
        } else {
            // 没有等号
            // 直接将这个param键对应的值置为true
            paramObj[v] = true;
        }
    }
    return paramObj
}
console.log(parseParam('http://www.getui.com?user=superman&id=345&id=678&user=superman2'));
复制代码

codeSandBox在线实现

题目反思

  • 这道题需要我们准确掌握如何将问号后面字符串提取出来的正则表达式。
  • 需要熟练掌握数组基本API的使用。
  • 需要掌握concat的两个参数的用法。


相关文章
|
1月前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
71 2
|
4月前
|
缓存 前端开发 中间件
[go 面试] 前端请求到后端API的中间件流程解析
[go 面试] 前端请求到后端API的中间件流程解析
|
4月前
|
并行计算 数据挖掘 大数据
[go 面试] 并行与并发的区别及应用场景解析
[go 面试] 并行与并发的区别及应用场景解析
|
16天前
|
Java 程序员
面试官的加分题:super关键字全解析,轻松应对!
小米,29岁程序员,通过一个关于Animal和Dog类的故事,详细解析了Java中super关键字的多种用法,包括调用父类构造方法、访问父类成员变量及调用父类方法,帮助读者更好地理解和应用super,应对面试挑战。
32 3
|
1月前
|
存储 网络协议 安全
30 道初级网络工程师面试题,涵盖 OSI 模型、TCP/IP 协议栈、IP 地址、子网掩码、VLAN、STP、DHCP、DNS、防火墙、NAT、VPN 等基础知识和技术,帮助小白们充分准备面试,顺利踏入职场
本文精选了 30 道初级网络工程师面试题,涵盖 OSI 模型、TCP/IP 协议栈、IP 地址、子网掩码、VLAN、STP、DHCP、DNS、防火墙、NAT、VPN 等基础知识和技术,帮助小白们充分准备面试,顺利踏入职场。
83 2
|
1月前
|
存储 NoSQL MongoDB
MongoDB面试专题33道解析
大家好,我是 V 哥。今天为大家整理了 MongoDB 面试题,涵盖 NoSQL 数据库基础、MongoDB 的核心概念、集群与分片、备份恢复、性能优化等内容。这些题目和解答不仅适合面试准备,也是日常工作中深入理解 MongoDB 的宝贵资料。希望对大家有所帮助!
|
1月前
|
存储 缓存 网络协议
计算机网络常见面试题(二):浏览器中输入URL返回页面过程、HTTP协议特点,GET、POST的区别,Cookie与Session
计算机网络常见面试题(二):浏览器中输入URL返回页面过程、HTTP协议特点、状态码、报文格式,GET、POST的区别,DNS的解析过程、数字证书、Cookie与Session,对称加密和非对称加密
|
1月前
|
域名解析 缓存 网络协议
浏览器中输入URL返回页面过程(超级详细)、DNS域名解析服务,TCP三次握手、四次挥手
浏览器中输入URL返回页面过程(超级详细)、DNS域名解析服务,TCP三次握手、四次挥手
|
1月前
|
缓存 前端开发 JavaScript
"面试通关秘籍:深度解析浏览器面试必考问题,从重绘回流到事件委托,让你一举拿下前端 Offer!"
【10月更文挑战第23天】在前端开发面试中,浏览器相关知识是必考内容。本文总结了四个常见问题:浏览器渲染机制、重绘与回流、性能优化及事件委托。通过具体示例和对比分析,帮助求职者更好地理解和准备面试。掌握这些知识点,有助于提升面试表现和实际工作能力。
66 1
|
3月前
|
设计模式 Java 关系型数据库
【Java笔记+踩坑汇总】Java基础+JavaWeb+SSM+SpringBoot+SpringCloud+瑞吉外卖/谷粒商城/学成在线+设计模式+面试题汇总+性能调优/架构设计+源码解析
本文是“Java学习路线”专栏的导航文章,目标是为Java初学者和初中高级工程师提供一套完整的Java学习路线。
479 37

推荐镜像

更多