💡 前言 :正则表达式是拼多多、字节、阿里前端笔试最高频考点之一。很多同学JS基础不错,但一遇到正则直接白给。
✨ 本篇完全对标拼多多真实笔试原题,从需求、规则、语法、代码、易错点全方位拆解,零基础也能吃透正则核心,轻松拿捏大厂笔试!
今天这篇完全对标拼多多真实笔试原题,从需求、规则、语法、代码、易错点全方位拆解,看完直接秒杀所有手机号正则面试题!
📌 一、真题 1:手机号正则校验
题目需求
- 如何验证用户输入的手机号是正确的?
- 必须是 11 位纯数字
- 手机号必须 以数字 1 开头
- 第二位不能是 0、1、2
- 前两位确定后,后面必须跟随 9 位数字
✅核心原则:永远不要相信用户的输入(把用户当小白)
✅正则本质:模式匹配 + 字符规则数学约束。
✅真题标准答案
js
let str = '15188888898';
// 描述一个匹配的规则
// 一个字符一个字符的匹配
//[] 表示匹配的字符范围
//{n} 表示字符的长度
//let reg =/1[3-9][0-9]{9}/;
let reg =/^1[3-9]\d{9}$/;
console.log(
Object.prototype.toString.call(reg)
)
console.log(typeof {}); //类型 对象object
console.log(typeof reg); //类型 对象object
console.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 开头;
js
/1/
匹配第一个字符为1
------------------>
🧱 3-9:限定第二位取值范围,规避 0/1/2;
js
/1[3-9]/
匹配第二个字符,第二位取值范围:3-9
------------------>
🧱 \d{9}:\d代表单个数字,
🧱 {9}代表精准匹配 9 次,补齐末尾位数。
js
/1[3-9]\d{9}/
------------------>
🧱 ^:匹配字符串起始位置,$:匹配字符串结束位置,杜绝前后多出多余字符;
js
let str = '13888888888ss';
//一般
//let reg =/1[3-9][0-9]{9}/;//false
// 有$
let reg =/1[3-9]\d{9}$/; //true
console.log(reg.test(str)); //$表示字符串的结束
let str = 'aa13888888888';
//一般
//let reg =/1[3-9][0-9]{9}/; //false
//有^
let reg =/^1[3-9]\d{9}$/; //true
console.log(reg.test(str));//^表示字符串的开始
❌ 新手常见错误写法(笔试高频踩坑)
js
// 错误1:没有加^ $,会匹配到不完整号码
const reg1 = /1[3-9]\d{9}/
// 错误2:第二位范围写错
const reg2 = /^1[0-9]\d{9}$/
// 错误3:位数写死错误
const reg3 = /^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+ :+ 代表匹配 一次或多次,可以提取连续数字
js
const str = '价格是100元,进价是80元,赚了20元';
//匹配数字
const reg = /\d+/g; //g表示全局匹配
console.log(reg.test(str)); //true
const res = str.match(reg);
console.log(res); //['100', '80', '20']
✨2. 字符串正则替换(replace)
replace(正则, 新内容) :批量替换字符串内容
js
//干掉- w 改成 W大写
const str= 'hello-world';
// () 表示分组 不匹配() ,但是可以提取
// $1表示提取第一个分组的内容
const reg =/-(\w)/;
console.log(str.match(reg)); //['-w', 'w']
const res = str.replace(reg, (_,c)=>{
console.log(_,c,'/////');
return c.toUpperCase();
})
console.log(res); //helloWorld
步骤
1. 正则 -(\w) 找到 -字母
2. 分组 () 把后面的字母提取出来
3. replace 回调里把字母变大写,自动删除 -
4. 最终:hello-world → helloWorld
🛠️另一种
js
const res = "hello-world".replace(
/-(\w)/,
(_,c)=>{ return c.toUpperCase(); }
)
console.log(res); //helloWorld
✨3. 进阶实战:模板字符串正则渲染(递归替换)
除了数字提取、字符替换,正则递归替换也是笔试、项目开发高频用法,常用于模板字符串插值渲染,实现模板占位符批量替换为真实数据。
需求场景 :通过正则匹配 {``{变量名}} 占位符,递归替换模板中所有变量,实现数据动态渲染。
js
// 模板字符串
let template = `我是{{name}}, 年龄{{age}}, 性别{{sex}}`;
// 数据源对象
let person = {
name: '张三',
age: 17,
sex: '男'
}
// 正则模板渲染函数(递归替换所有占位符)
function render(template, data) {
// 匹配 {{变量名}} 格式的占位符
const reg = /{{(\w+)}}/
// 判断是否存在可匹配的占位符
if (reg.test(template)) {
// exec 获取匹配到的变量名
const name = reg.exec(template)[1];
// 替换当前匹配到的占位符
template = template.replace(reg, data[name])
// 递归调用,继续替换剩余占位符
return render(template,data);
}
// 所有占位符替换完成,返回最终字符串
return template;
}
// 输出结果:我是张三, 年龄17, 性别男
console.log(render(template, person));
核心知识点解析
/{``{(\w+)}}/:专属模板占位符正则,{``{ }}匹配固定双大括号,(\w+)捕获括号内的变量名(字母/数字/下划线);- exec() :正则匹配方法,可获取匹配结果及捕获组内容,精准拿到变量名;
- 递归逻辑:单次只替换一个占位符,通过递归循环匹配,直到模板中无任何占位符,完美适配多变量模板;
- 无需
g全局修饰符,依靠递归实现全局替换,是前端模板引擎的核心底层原理。
📌 五、正则符号速查表(面试直接背)
| 符号 | 作用说明 |
|---|---|
| \d | 匹配任意单个数字 0-9 |
| \w | 匹配字母、数字、下划线 |
| + | 匹配前面字符 1 次或多次 |
| * | 匹配前面字符 0 次或多次 |
| \[\] | 字符范围约束 |
| {n} | 精准匹配 n 次 |
| g | 全局匹配 |
| ^ $ | 首尾严格锁定 |
📌 六、完整可直接上线的手机号校验工具函数
JavaScript
// 拼多多笔试完整版封装函数
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正则表达式前端面试拼多多笔试前端基础
❤️ 码字不易,欢迎点赞收藏,持续更新大厂前端笔试真题解析!