Logo Wand.Tools

正则表达式生成器

智能生成和解释正则表达式,支持各种常见模式匹配

JavaScript 正则表达式详解教程

JavaScript 正则表达式详解教程(完整语法 + 常见示例)

> 本文为 JavaScript 正则表达式(RegExp)入门到进阶的完整教程,包含语法规则、常用元字符、修饰符、断言、分组、贪婪匹配与懒惰匹配等内容,适用于前端开发、爬虫抓取、表单校验等应用场景。适合零基础和进阶用户学习与参考。

正则表达式基础语法

创建正则表达式的两种方式

const regex1 = /abc/;             // 字面量方式
const regex2 = new RegExp('abc'); // 构造函数方式

常见修饰符(Flags)

修饰符 描述
g 全局匹配
i 忽略大小写
m 多行匹配
s 允许 . 匹配换行符(ES2018)
u 支持 Unicode(ES6)
y 粘性匹配(ES6)

示例:

const re = /hello/gi;
const str = 'Hello hello';
console.log(str.match(re)); // ["Hello", "hello"]

元字符与字符集

常用元字符

字符 含义
. 匹配任意字符(除换行)
\d 匹配一个数字 [0-9]
\D 匹配非数字字符
\w 匹配字母数字或下划线
\W 匹配非字母数字或下划线
\s 匹配空白字符
\S 匹配非空白字符
\b 匹配单词边界
\B 非单词边界
\\ 匹配反斜杠

字符集与范围

/[abc]/     // 匹配 'a' 或 'b' 或 'c'
/[a-z]/     // 匹配小写字母
/[A-Z]/     // 匹配大写字母
/[0-9]/     // 匹配数字
/[^abc]/    // 匹配除 a b c 之外的任意字符

量词(重复匹配)

量词 含义
* 匹配前一项 0 次或多次
+ 匹配前一项 1 次或多次
? 匹配前一项 0 次或 1 次
{n} 恰好 n 次
{n,} 至少 n 次
{n,m} 至少 n 次,至多 m 次

示例:

/\d{4}/.test("2025");       // true
/ab{2,4}c/.test("abbbc");   // true

分组与捕获

/(abc)/         // 捕获分组
/(abc){2}/      // 捕获重复分组
/(?:abc)/       // 非捕获分组
/(a)(b)(c)/     // 多个捕获组

提取匹配内容:

const match = /(hello) (\w+)/.exec("hello world");
console.log(match[1]); // hello
console.log(match[2]); // world

断言(零宽断言)

先行断言(Positive Lookahead)

/\d+(?=px)/     // 匹配后面跟 px 的数字

否定先行断言(Negative Lookahead)

/\d+(?!px)/     // 匹配后面不是 px 的数字

后行断言(ES2018+)

/(?<=\$)\d+/    // 匹配前面是 $ 的数字
/(?<!$)\d+/    // 匹配前面不是 $ 的数字

贪婪匹配 vs 懒惰匹配

表达式 匹配行为
.* 贪婪(尽可能多)
.*? 懒惰(尽可能少)

示例:

const str = '<p>text</p><p>more</p>';
const greedy = /<p>.*<\/p>/;
const lazy = /<p>.*?<\/p>/g;

console.log(str.match(greedy)); // ['<p>text</p><p>more</p>']
console.log(str.match(lazy));   // ['<p>text</p>', '<p>more</p>']

常见使用场景示例

邮箱验证

/^[w.-]+@[a-zA-Z\d.-]+\.[a-zA-Z]{2,}$/.test("[email protected]");

手机号验证(中国大陆)

/^1[3-9]\d{9}$/.test("13888888888");

去除所有空白字符

const cleaned = str.replace(/\s+/g, '');

提取 URL 中的域名

const domain = url.match(/https?:\/\/([^\/]+)/)[1];

正则方法小结

方法 描述
test(str) 测试字符串是否匹配
exec(str) 返回匹配结果对象(带分组)
str.match(re) 返回所有匹配项(含全局匹配)
str.replace() 替换匹配内容
str.split(re) 使用正则分隔字符串
str.search(re) 返回首次匹配位置

总结

本教程系统整理了 JavaScript 正则表达式的完整语法与实际应用案例,适合前端开发、后端开发、文本处理等各种使用场景。掌握正则表达式能够大幅提升字符串处理效率。