🔤 一、基础符号口诀(10字内)
| 符号 | 口诀 | 示例说明 |
|---|---|---|
. | 点代一切 | 匹配任意字符(换行除外) |
\d | \d 数字 | 等价 [0-9] |
\w | \w 单词 | 字母数字下划线 [a-zA-Z0-9_] |
\s | \s 空白 | 空格、制表符、换行等 |
\D \W \S | 大写取反 | \D → 非数字 |
^ | 开头锚定 | ^Hello → 必须以 Hello 开头 |
$ | 结尾锚定 | world$ → 必须以 world 结尾 |
* | 零或多 | \d* → 0 个或多个数字 |
+ | 至少一个 | \d+ → 至少一个数字 |
? | 有无皆可 | colou?r → 匹配 color 或 colour |
{n} | 刚好 n 个 | \d{3} → 刚好 3 位数字 |
{n,} | 至少 n 个 | \d{6,} → 6 位以上 |
{n,m} | n 到 m 个 | \d{6,8} → 6~8 位 |
📌 口诀总结:
“点代一切,\d 数字,\w 字符,\s 空格”
“^ 开头,$ 结尾,+ 至少一个”
📦 二、常用场景速查表
| 需求 | 正则表达式 | 说明 |
|---|---|---|
| 手机号(简单) | /^1[3-9]\d{9}$/ | 以1开头,第二位3-9,共11位 |
| 邮箱(基础) | /^\S+@\S+.\S+$/ | 非空@非空.非空 |
| 数字 | /^\d+$/ | 全是数字 |
| 整数(含负) | /^-?\d+$/ | -? 表示可能有负号 |
| 小数 | /^-?\d+(.\d+)?$/ | (.\d+)? 表示小数部分可选 |
| 密码(字母数字) | /^[a-zA-Z0-9]{6,}$/ | 至少6位字母数字 |
| 中文 | /^[\u4e00-\u9fa5]+$/ | 匹配纯中文 |
| 网址(http/https) | /^https?://.+/ | s? 表示 s 可有可无 |
📌 提示:这些是基础版,实际项目可用库如 validator.js
🔧 三、JS 中使用正则的方法
| 方法 | 口诀 | 示例 |
|---|---|---|
str.match(reg) | 匹配用 match | "abc".match(/\d+/) → 结果数组或 null |
str.replace(reg, new) | 替换用 replace | "a1b2".replace(/\d/g, "X") → "aXbX" |
str.split(reg) | 分割用 split | "a1b2c".split(/\d/) → ["a","b","c"] |
reg.test(str) | 判断用 test | /\d/.test("abc") → false |
reg.exec(str) | 提取用 exec | 返回详细匹配信息(少用) |
✅ 最常用组合:
// 判断是否为手机号
/^1[3-9]\d{9}$/.test(phone)
// 替换所有数字为 *
"abc123def".replace(/\d/g, "*") // "abc***def"
// 提取所有数字
"价格:100元,数量:2件".match(/\d+/g) // ["100", "2"]
⚠️ 四、高频避坑指南
| 错误 | 正确做法 | 说明 |
|---|---|---|
忘记 ^ 和 $ | 加锚点 | 否则 "x123x" 也能通过 /\d+/ |
| 忘记转义特殊字符 | 用 \ | 如点 . 写成 \.,反斜杠 \ 写成 \\ |
忘记全局标志 g | 加 g | 否则只匹配第一个 |
| 在字符串中写错 | 用 /.../ 不用 " | ❌ "\d+" 是字符串,✅ /\d+/ 是正则对象 |
| 中文匹配不准 | 用 Unicode 范围 | [\u4e00-\u9fa5] |
🎯 五、终极六句口诀(必背)
每天念一遍,正则变直觉!
- 点代一切,\d 数字
- ^ 开头,$ 结尾
- + 至少一个, ***** 零或多
- 小写是它,大写不是它(
\dvs\D) - 全局匹配加 g,不然只找一
- test 判断,match 提取