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

💡 前言 :正则表达式是拼多多、字节、阿里前端笔试最高频考点之一。很多同学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正则表达式前端面试拼多多笔试前端基础

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

相关推荐
二月夜2 天前
剖析Java正则表达式回溯问题
java·正则表达式
小林ixn3 天前
从拼多多手机号验证到模板引擎:深入正则表达式与 JS 字符串处理
开发语言·javascript·正则表达式
水木流年追梦4 天前
大模型入门-大模型优化方法12-YaRN 长文本外推技术
人工智能·分布式·算法·正则表达式·prompt
水木流年追梦4 天前
大模型入门-大模型优化方法13- MTP 多 token 输出、DCA 双块注意力
人工智能·分布式·算法·正则表达式·prompt
Zella折耳根5 天前
Java 正则表达式实战:IP 地址匹配与替换全解析
java·tcp/ip·正则表达式
百万双色球6 天前
正则表达式用法
正则表达式
GuWen_yue7 天前
正则表达式(Regex)通用相关知识点
正则表达式
meilindehuzi_a7 天前
打破0基础:通过 5 个核心案例深度拆解 JavaScript 正则表达式与运行时类型系统
开发语言·javascript·正则表达式
sugar__salt8 天前
JS正则表达式与字符串高阶实战精讲
开发语言·javascript·正则表达式