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

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

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

相关推荐
吴声子夜歌1 天前
正则指引——Ruby
开发语言·正则表达式·ruby
吴声子夜歌1 天前
正则指引——Golang
开发语言·golang·正则表达式
吴声子夜歌2 天前
正则指引——PHP
开发语言·正则表达式·php
吴声子夜歌4 天前
正则指引——断言
正则表达式
吴声子夜歌4 天前
正则指引——匹配原理
java·正则表达式
吴声子夜歌5 天前
正则表达式——环视
开发语言·正则表达式
吴声子夜歌6 天前
正则表达式——边界
正则表达式
营养充电站6 天前
C++23 新特性在 CLion 中的实战体验
macos·docker·jupyter·正则表达式
吴声子夜歌7 天前
正则表达式——字符组
正则表达式