JavaScript 正则表达式大全(速查表)
1. 字符类(Character Classes)
| 语法 | 说明 | 等价写法 | 示例 |
|---|
\d | 数字(0–9) | [0-9] | /\d/.test("8") ✅ |
\D | 非数字 | [^0-9] | /\D/.test("A") ✅ |
\w | 字母、数字、下划线 | [A-Za-z0-9_] | /\w/.test("_") ✅ |
\W | 非字母数字下划线 | [^A-Za-z0-9_] | /\W/.test("@") ✅ |
\s | 空白字符(空格、Tab、换行等) | [ \t\r\n\f\v] | /\s/.test(" ") ✅ |
\S | 非空白字符 | [^ \t\r\n\f\v] | /\S/.test("a") ✅ |
. | 除换行符外的任意字符 | - | /./.test("X") ✅ |
2. 边界(Anchors)
| 语法 | 说明 | 示例 |
|---|
^ | 字符串/行的开始 | /^abc/.test("abc123") ✅ |
$ | 字符串/行的结束 | /xyz$/.test("123xyz") ✅ |
\b | 单词边界 | /\bcat\b/.test("cat dog") ✅ |
\B | 非单词边界 | /\Bcat\B/.test("concatenate") ✅ |
(?=...) | 正向肯定断言 | /\d(?=px)/ 匹配 10px 中的 0 |
(?!...) | 正向否定断言 | /\d(?!px)/ 匹配数字后面不是 px |
(?<=...) | 反向肯定断言(需 ES2018+) | /(?<=\$)\d+/ 匹配 $100 中的 100 |
(?<!...) | 反向否定断言(需 ES2018+) | /(?<!\$)\d+/ 匹配前面不是 $ 的数字 |
3. 量词(Quantifiers)
| 语法 | 含义 | 示例 |
|---|
* | 0 次或多次 | /a*/ 匹配 “” 或 "aaa" |
+ | 1 次或多次 | /a+/ 匹配 "a", "aaa" |
? | 0 次或 1 次(可选。这里默认是紧贴的一个单位) | /colou?r/ 可匹配 "color" 或 "colour" |
{n} | 恰好 n 次 | /\d{3}/ 匹配 "123" |
{n,} | 至少 n 次 | /\d{2,}/ |
{n,m} | n 到 m 次之间 | /\d{2,4}/ |
*? / +? / {n,m}? | 懒惰匹配(尽可能少) | /<.+?>/ |
4. 分组与选择
| 语法 | 说明 | 示例 |
|---|
( ... ) | 捕获分组,可用 \1 引用 | /(\d{4})-(\d{2})-(\d{2})/ |
(?: ... ) | 非捕获分组 | `/(?:19 |
x|y | 匹配 x 或 y | `/cat |
(?<name> ... ) | 命名分组(ES2018+) | /(?<year>\d{4})/ |
5. 字符转义
要匹配元字符本身(如 . \ + * ? ^ $ { } ( ) [ ] | 等),需要用 \ 转义:
- 示例:
/\.jpg$/ 用来匹配以 .jpg 结尾的字符串。
6. 修饰符(Flags)
| 修饰符 | 说明 |
|---|
g | 全局匹配(查找所有匹配) |
i | 忽略大小写 |
m | 多行模式(^ 和 $ 匹配每行开头和结尾) |
s | 单行模式(. 可以匹配换行符) |
u | Unicode 模式 |
y | 粘连模式(从 lastIndex 精确匹配) |
7. 常见实用例子
const phoneReg = /^1\d{10}$/;
const emailReg = /^[\w.-]+@[\w.-]+\.[A-Za-z]{2,}$/;
^ # 字符串开始
[\w.-]+ # 用户名部分:字母、数字、下划线、点、小横线,至少 1 个
@ # 必须有一个 @
[\w.-]+ # 域名部分:字母、数字、下划线、点、小横线,至少 1 个
\. # 一个字面上的点(.)
[A-Za-z]{2,} # 后缀部分:只能是字母,长度 >= 2
$ # 字符串结束
const url = "https://www.example.com/page";
const domainReg = /https?:\/\/([^/]+)/;
console.log(url.match(domainReg)[1]);
const dateStr = "2024-06-15";
const dateReg = /(\d{4})-(\d{2})-(\d{2})/;
const [, year, month, day] = dateStr.match(dateReg);
console.log(year, month, day);
所有评论(0)