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单行模式(. 可以匹配换行符)
uUnicode 模式
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]); // "www.example.com"

// 捕获日期
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); // 2024 06 15

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐