Skip to content

📝 JavaScript 正则表达式核心知识点总结

我帮你把正则的核心概念、常用语法、熟练记忆点和实战技巧整理成体系,新手也能快速掌握,机考/面试中能直接用。


一、正则基础核心(必须记)

1. 正则的两种创建方式

JavaScript

// 1. 字面量形式(推荐,简洁,无转义坑)
const reg1 = /abc/g; 

// 2. 构造函数形式(适合动态拼接规则)
const str = "abc";
const reg2 = new RegExp(str, "g");

✅ 记忆点:

  • 字面量用 /规则/修饰符,构造函数用 new RegExp(规则字符串, 修饰符)

  • 构造函数中特殊字符需要双重转义(如 /\d/new RegExp("\\d"))。

2. 三大修饰符(高频)

修饰符含义常用场景
g全局匹配(不匹配一次就停止)替换所有匹配项、提取所有符合规则的内容
i忽略大小写不区分大小写的搜索/验证(如手机号、邮箱)
m多行匹配(^/$ 匹配每行开头/结尾)处理多行文本(如日志、多行输入)
✅ 记忆点:g(全局)、i(忽略大小写)、m(多行)是最常用的三个,组合使用如 /abc/gi

二、正则元字符(分类型记,重点)

1. 字符匹配类(核心)

元字符含义示例
.匹配除换行符外的任意单个字符/a.c/ 匹配 abca1c,不匹配 aca\nc
\d匹配数字(0-9)/\d{3}/ 匹配 123456
\D匹配非数字/\D/ 匹配 a@,不匹配 5
\w匹配字母、数字、下划线(等价 [a-zA-Z0-9_]/\w+/ 匹配 abc123_
\W匹配非字母/数字/下划线/\W/ 匹配 @(空格)
\s匹配空白符(空格、制表符、换行等)/\s+/ 匹配多个空格
\S匹配非空白符/\S/ 匹配 a1,不匹配空格
✅ 记忆点:
  • 小写(\d/\w/\s)匹配“目标类型”,大写(\D/\W/\S)匹配“非目标类型”;

  • . 是“万能匹配”,但不包含换行符,如需匹配所有(含换行)用 [\s\S]

2. 边界匹配类(易错点)

元字符含义示例
^匹配字符串开头(m 模式下匹配每行开头)/^abc/ 匹配 abc123,不匹配 123abc
$匹配字符串结尾(m 模式下匹配每行结尾)/abc$/ 匹配 123abc,不匹配 abc123
\b匹配单词边界(字母/数字与非字母/数字的分界)/\bis\b/ 匹配 this is 中的 is,不匹配 this 中的 is
\B匹配非单词边界/\Bis\B/ 匹配 island 中的 is
✅ 记忆点:
  • ^ 是“开头”,$ 是“结尾”,组合 /^xxx$/ 用于精确匹配(如手机号、邮箱验证);

  • 验证类正则必须加 ^$(否则 13800138000a 也会被 /1\d{10}/ 匹配)。

3. 量词类(控制匹配次数,高频)

量词含义示例
*匹配 0 次或多次(贪婪)/a*/ 匹配 ""aaaa
+匹配 1 次或多次(贪婪)/a+/ 匹配 aaaa,不匹配 ""
?匹配 0 次或 1 次(贪婪)/a?/ 匹配 ""a,不匹配 aa
{n}匹配恰好 n 次/a{3}/ 匹配 aaa,不匹配 aaaaaa
{n,}匹配至少 n 次(贪婪)/a{2,}/ 匹配 aaaaa
{n,m}匹配 n 到 m 次(贪婪)/a{2,4}/ 匹配 aaaaaaaaa
*?/+?/??非贪婪匹配(尽可能少匹配)a+? 匹配 aaa 时只取第一个 a
✅ 记忆点:
  • 贪婪匹配(默认):“能多取就多取”;非贪婪匹配(加 ?):“能少取就少取”;

  • 常用组合:

    • 手机号:/^1\d{10}$/(1开头,后面10位数字);

    • 非空字符串:/^\S+$/(至少1个非空白符)。

4. 分组与分支类

语法含义示例
()分组(将多个字符视为整体)/(ab)+/ 匹配 ababab,不匹配 aab
``分支(或)
\n反向引用(引用第 n 个分组的内容)/(\w)\1/ 匹配 aa22__
✅ 记忆点:
  • 分组优先于分支,复杂规则用 () 明确范围(如 /a(b|c)d/ 匹配 abdacd);

  • 反向引用常用于匹配重复字符(如连续相同数字、成对括号)。


三、正则常用方法(必须掌握)

1. 字符串方法(更常用)

方法作用示例
str.match(reg)提取匹配结果(g 修饰符返回所有匹配,否则返回第一个)"123abc456".match(/\d+/g)["123", "456"]
str.replace(reg, newStr/函数)替换匹配内容"a1b2c3".replace(/\d/g, "*")"a*b*c*"
str.search(reg)查找第一个匹配的索引(无则返回 -1)"abc123".search(/\d/)3
str.split(reg)按正则规则分割字符串"a,b;c".split(/[,;]/)["a", "b", "c"]

2. 正则对象方法

方法作用示例
reg.test(str)检测字符串是否匹配(返回布尔值)/^\d+$/.test("123")true
reg.exec(str)提取匹配结果(可配合 g 循环提取所有)循环调用 exec 可逐次获取匹配项
✅ 记忆点:
  • 验证类场景用 reg.test(str)(如验证手机号是否合法);

  • 提取类场景用 str.match(reg)(加 g 提取所有);

  • 替换类场景用 str.replace(reg, 替换值)(支持函数动态替换)。


四、必须熟练记忆的“高频正则片段”

直接背下来,机考/开发中能直接套用:

  1. 手机号验证/^1\d{10}$/

  2. 邮箱验证(简易版)/^[\w.-]+@[a-zA-Z0-9-]+.[a-zA-Z]{2,6}$/

  3. 身份证号(18位)/^\d{17}[\dXx]$/

  4. 匹配所有数字/\d+/g

  5. 匹配中文字符/[\u4e00-\u9fa5]+/g

  6. 去除首尾空格str.replace(/^\s+|\s+$/g, "")(或用 str.trim(),但正则更灵活)

  7. 替换所有空格str.replace(/\s+/g, "")

  8. 匹配URL/^https?://[^\s]+$/

  9. 提取字符串中的数字str.match(/\d+/g) || []

  10. 验证是否为纯数字/^\d+$/.test(str)


五、避坑指南(易错点)

  1. 转义问题:字面量中 \ 是转义符,构造函数中需要 \\(如 /./new RegExp("\."));

  2. 贪婪 vs 非贪婪:默认贪婪,如需“最短匹配”加 ?(如 <div>1</div><div>2</div> 匹配单个标签用 /<div>.*?</div>/);

  3. 精确匹配:验证类正则必须加 ^$(否则部分匹配会误判);

  4. 换行符匹配. 不匹配换行,如需匹配所有字符用 [\s\S][\d\D]

  5. 反向引用:分组编号从 1 开始,\0 代表整个匹配项。


六、核心总结(记忆关键点)

  1. 三大修饰符g(全局)、i(忽略大小写)、m(多行);

  2. 核心元字符\d(数字)、\w(单词字符)、\s(空白),大写是反义;

  3. 量词核心+(1+)、*(0+)、?(0/1)、{n,m}(范围),加 ? 非贪婪;

  4. 边界匹配^(开头)、$(结尾)组合实现精确验证;

  5. 常用方法test(验证)、match(提取)、replace(替换);

  6. 高频片段:手机号、邮箱、去空格等直接套用,不用重复写。

如果需要,我可以帮你整理一份正则实战练习题(带答案),包含验证、提取、替换等场景,帮你巩固记忆。需要吗?

(注:文档部分内容可能由 AI 生成)

最近更新