当前位置: 首页 > news >正文

[特殊字符] 拼多多大厂笔试题——正则表达式

💡前言:正则表达式是拼多多、字节、阿里前端笔试最高频考点之一。很多同学JS基础不错,但一遇到正则直接白给。

✨ 本篇完全对标拼多多真实笔试原题,从需求、规则、语法、代码、易错点全方位拆解,零基础也能吃透正则核心,轻松拿捏大厂笔试!

今天这篇完全对标拼多多真实笔试原题,从需求、规则、语法、代码、易错点全方位拆解,看完直接秒杀所有手机号正则面试题!

📌 一、真题 1:手机号正则校验

题目需求

  • 如何验证用户输入的手机号是正确的?
    • 必须是11 位纯数字
    • 手机号必须以数字 1 开头
    • 第二位不能是 0、1、2
    • 前两位确定后,后面必须跟随9 位数字

核心原则:永远不要相信用户的输入(把用户当小白)

正则本质:模式匹配 + 字符规则数学约束。

✅真题标准答案

letstr='15188888898';// 描述一个匹配的规则// 一个字符一个字符的匹配//[] 表示匹配的字符范围//{n} 表示字符的长度//let reg =/1[3-9][0-9]{9}/;letreg=/^1[3-9]\d{9}$/;console.log(Object.prototype.toString.call(reg))console.log(typeof{});//类型 对象objectconsole.log(typeofreg);//类型 对象objectconsole.log(reg.test(str));//true//let str = '13888888888';//console.log(reg.test(str)); //false//let str = '138888888';少一个8//console.log(reg.test(str)); //false//let str = '13888888888ss';$表示字符串的结束//console.log(reg.test(str)); //false//let str = '13888888888ss';^表示字符串的开始

✨考点解析

💡/ element / ——>(正则表达式基本框架)每次匹配一个字符

🧱1:固定开头字符,满足手机号以 1 开头;

/1/匹配第一个字符为1

——————>

🧱[3-9]:限定第二位取值范围,规避 0/1/2;

/1[3-9]/匹配第二个字符,第二位取值范围:3-9

——————>

🧱\d{9}:\d代表单个数字,

🧱{9}代表精准匹配 9 次,补齐末尾位数。

/1[3-9]\d{9}/

——————>

🧱^:匹配字符串起始位置,$:匹配字符串结束位置,杜绝前后多出多余字符;

letstr='13888888888ss';//一般//let reg =/1[3-9][0-9]{9}/;//false// 有$letreg=/1[3-9]\d{9}$/;//trueconsole.log(reg.test(str));//$表示字符串的结束letstr='aa13888888888';//一般//let reg =/1[3-9][0-9]{9}/; //false//有^letreg=/^1[3-9]\d{9}$/;//trueconsole.log(reg.test(str));//^表示字符串的开始

❌ 新手常见错误写法(笔试高频踩坑)

// 错误1:没有加^ $,会匹配到不完整号码constreg1=/1[3-9]\d{9}/// 错误2:第二位范围写错constreg2=/^1[0-9]\d{9}$/// 错误3:位数写死错误constreg3=/^1[3-9]\d{8}$/

📌 二、正则表达式核心语法精讲(笔试必背)

💡正则全称:Regular Expression

💡JS 正则固定格式:/ 正则规则 /

💡匹配逻辑:一次只匹配一个字符,逐位校验

  • / /:正则包裹标识,内部写匹配规则
  • {}:限定前面字符的匹配次数
  • []:限定单个字符的取值范围
  • \d:匹配任意数字 0-9
  • ^:匹配字符串开头
  • $:匹配字符串结尾

📌 三、前置基础:JS 数据类型(笔试底层考点)

JS 数据类型分为两大派系,正则操作字符串全部依赖这两类:

✨1. 基本类型(值类型)
  • Number 数值类型
  • String 字符串类型(正则主要操作对象)
  • Boolean 布尔类型
  • undefined
  • null
✨2. 引用类型(对象类型)
  • Object 普通对象
  • Array 数组:下标为数字索引的特殊对象

📌 四、正则两大高频操作:提取数字 + 替换字符

✨1. 提取字符串中所有数字(match + 全局匹配 g)

match():字符串提取正则匹配内容

g 修饰符:global 全局匹配,找到所有符合规则的内容,不停止

\d+:+ 代表匹配一次或多次,可以提取连续数字

conststr='价格是100元,进价是80元,赚了20元';//匹配数字constreg=/\d+/g;//g表示全局匹配console.log(reg.test(str));//trueconstres=str.match(reg);console.log(res);//['100', '80', '20']

✨2. 字符串正则替换(replace)

replace(正则, 新内容):批量替换字符串内容

//干掉- w 改成 W大写conststr='hello-world';// () 表示分组 不匹配() ,但是可以提取// $1表示提取第一个分组的内容constreg=/-(\w)/;console.log(str.match(reg));//['-w', 'w']constres=str.replace(reg,(_,c)=>{console.log(_,c,'/////');returnc.toUpperCase();})console.log(res);//helloWorld

步骤

1. 正则 -(\w) 找到 -字母
2. 分组 () 把后面的字母提取出来
3. replace 回调里把字母变大写,自动删除 -
4. 最终:hello-world → helloWorld

🛠️另一种

constres="hello-world".replace(/-(\w)/,(_,c)=>{returnc.toUpperCase();})console.log(res);//helloWorld

✨3. 进阶实战:模板字符串正则渲染(递归替换)

除了数字提取、字符替换,正则递归替换也是笔试、项目开发高频用法,常用于模板字符串插值渲染,实现模板占位符批量替换为真实数据。

需求场景:通过正则匹配{{变量名}}占位符,递归替换模板中所有变量,实现数据动态渲染。

// 模板字符串lettemplate=`我是{{name}}, 年龄{{age}}, 性别{{sex}}`;// 数据源对象letperson={name:'张三',age:17,sex:'男'}// 正则模板渲染函数(递归替换所有占位符)functionrender(template,data){// 匹配 {{变量名}} 格式的占位符constreg=/{{(\w+)}}/// 判断是否存在可匹配的占位符if(reg.test(template)){// exec 获取匹配到的变量名constname=reg.exec(template)[1];// 替换当前匹配到的占位符template=template.replace(reg,data[name])// 递归调用,继续替换剩余占位符returnrender(template,data);}// 所有占位符替换完成,返回最终字符串returntemplate;}// 输出结果:我是张三, 年龄17, 性别男console.log(render(template,person));
核心知识点解析
  • /{{(\w+)}}/:专属模板占位符正则,{{ }}匹配固定双大括号,(\w+)捕获括号内的变量名(字母/数字/下划线);
  • exec():正则匹配方法,可获取匹配结果及捕获组内容,精准拿到变量名;
  • 递归逻辑:单次只替换一个占位符,通过递归循环匹配,直到模板中无任何占位符,完美适配多变量模板;
  • 无需g全局修饰符,依靠递归实现全局替换,是前端模板引擎的核心底层原理。

📌 五、正则符号速查表(面试直接背)

符号作用说明
\d匹配任意单个数字 [0-9]
\w匹配字母、数字、下划线
+匹配前面字符 1 次或多次
*匹配前面字符 0 次或多次
[]字符范围约束
{n}精准匹配 n 次
g全局匹配
^ $首尾严格锁定

📌 六、完整可直接上线的手机号校验工具函数

// 拼多多笔试完整版封装函数 function checkPhoneNumber(phone) { const reg = /^1[3-9]\d{9}$/ return reg.test(phone) } // 测试 console.log(checkPhoneNumber("13666666666")) // true console.log(checkPhoneNumber("12666666666")) // false

📌 七、全文核心总结

✨ 本篇围绕拼多多前端笔试核心正则考点,从零拆解手机号正则校验核心逻辑、原生正则语法、三大实战用法,覆盖笔试选择题、编程题、工程实战三大场景:

  • ✅ 掌握手机号正则核心规则:首尾锚点、范围匹配、精准位数约束
  • ✅ 吃透正则基础符号,告别语法混淆、手写报错问题
  • ✅ 熟练运用 match 提取、replace 替换、递归模板渲染三大实战技巧
  • ✅ 规避新手高频踩坑点,写出规范、严谨、可上线的正则代码

💡 学习建议:正则不要死记硬背,理解「逐字符匹配、规则约束」的核心思想,就能适配各类表单校验、字符串处理场景!

💬 文末互动

看完这篇,相信你已经拿捏拼多多正则笔试核心考点!大家如果遇到其他大厂正则真题、正则手写难题,欢迎评论区留言交流,一起刷题进阶!

✅ 掘金发布标签

JavaScript正则表达式前端面试拼多多笔试前端基础

❤️码字不易,欢迎点赞收藏,持续更新大厂前端笔试真题解析!

http://www.jsqmd.com/news/951876/

相关文章:

  • 2026年中央空调清洗公司推荐哪些?商业楼宇空调系统清洗选型指南 - 华旭传媒
  • 实战应用:基于快马平台开发带历史记录与偏好设置的夺命许愿软件
  • 如何快速掌握免费音乐歌词获取工具:面向音乐爱好者的完整使用指南
  • SWAT模型实战踩坑记:.sol文件为空、气象数据缺失?手把手教你诊断与修复
  • Kimi k2.6 LeetCode 2972. 统计移除递增子数组的数目 II Python3实现
  • SourceGit:让Git版本控制变得直观高效的跨平台图形化解决方案
  • 智慧教育平台电子课本一键解析:告别繁琐下载的智能解决方案
  • 新手福音:用快马平台生成练习项目,轻松理解github协作开发
  • 【会议征稿通知 | 中国教育发展战略学会教育大数据专业委员会主办 | SPIE出版 | EI 、Scopus稳定检索】第六届先进算法与信号、图像处理国际学术会议(AASIP 2026)
  • 别再怕约束了!手把手教你用QUBO模型把复杂优化问题‘拍扁’成无约束问题
  • 【深度解析】Gemma 4 12B:面向本地 Agent 工作流的统一多模态模型与 OpenAI 兼容接入实践
  • ContextMenuForWindows11开源项目:彻底解放你的右键菜单生产力
  • 如何快速构建你的专属离线英语发音库:11万单词MP3音频一键下载指南
  • LabVIEW 2019生成DLL实战:手把手教你用C# WinForm调用(附避坑指南)
  • 如何永久保存微信聊天记录:掌握你的数字记忆主权
  • 豆包收费成字节AI转折点:顾全全离职,AI4S团队何去何从?
  • 别再乱改my.cnf了!MySQL 8.0+Docker大小写敏感问题的根治方案
  • iFakeLocation终极指南:三步完成iOS虚拟定位的完整方案
  • 2026年近期潍坊行业知名的智能热水龙头生产商怎么选择?专业解析与推荐 - 2026年企业资讯
  • 当H.265遇见老协议:一次给FFmpeg‘打补丁’,让旧直播架构兼容HEVC的实践记录
  • 昌平区如何选购靠谱的近视防控眼镜? - mypinpai
  • 解锁AI绘画的魔法钥匙:ComfyUI ControlNet Aux全功能探索指南
  • Webots仿真翻车实录:从‘球体自由落体’到‘小车原地打转’,我踩过的那些物理参数坑
  • 2026年特色美食分量足的景点排行榜,选购指南 - mypinpai
  • 5个关键步骤:用BG3ModManager轻松管理博德之门3模组
  • 今日开源[第7期]spec-kit - zhang
  • 效率提升:基于dezmall设计规范,用快马AI一键生成管理后台框架
  • 实时流式聚类×多模态AI工具链整合:单日处理2.4亿用户行为数据的低延迟架构(已通过等保三级认证)
  • 告别烂三角!用CGAL的isotropic_remeshing函数一键优化你的3D网格模型
  • 2026微信小程序商城平台深度解析:全链路选型与技术能力实测