[特殊字符] 拼多多大厂笔试题——正则表达式
💡前言:正则表达式是拼多多、字节、阿里前端笔试最高频考点之一。很多同学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正则表达式前端面试拼多多笔试前端基础
❤️码字不易,欢迎点赞收藏,持续更新大厂前端笔试真题解析!
