正则表达式是JavaScript中处理字符串的强大工具,常用于表单验证、内容提取、格式替换等场景,掌握它的创建方法是使用正则表达式的第一步。

两种创建正则表达式的方式
JavaScript中创建正则表达式主要有字面量和构造函数两种方式,两种方式各有适用场景。
1. 字面量方式
字面量是最常用的创建方式,语法简洁,适合正则表达式是固定字符串的场景。语法格式为/正则表达式内容/修饰符,其中修饰符可选。
示例:创建一个匹配数字的正则表达式
// 字面量方式创建匹配1-3位数字的正则
const reg1 = /^\d{1,3}$/;
console.log(reg1.test("123")); // 输出true
console.log(reg1.test("1234")); // 输出false2. RegExp构造函数方式
当需要动态拼接正则表达式内容时,字面量无法满足需求,此时可以使用RegExp构造函数。构造函数接收两个参数,第一个是正则表达式的字符串内容,第二个是可选的修饰符字符串。
示例:动态创建匹配指定前缀的正则
// 动态前缀
const prefix = "user_";
// 构造函数方式创建正则,注意字符串中的反斜杠需要转义
const reg2 = new RegExp("^" + prefix + "\\d{3}$");
console.log(reg2.test("user_123")); // 输出true
console.log(reg2.test("admin_123")); // 输出false两种方式的差异对比
两种方式的核心功能一致,但在使用场景和细节上有区别,具体对比如下:
| 对比项 | 字面量方式 | RegExp构造函数方式 |
|---|---|---|
| 语法简洁度 | 更简洁,不需要处理字符串转义 | 较繁琐,字符串中的反斜杠需要额外转义 |
| 动态性 | 无法动态拼接正则内容,正则固定 | 支持动态拼接正则内容,灵活性更高 |
| 性能 | 编译时创建,相同正则只会编译一次 | 运行时创建,每次执行都会重新编译 |
正则表达式常用修饰符
创建正则表达式时可以添加修饰符,改变正则的匹配规则,常用的修饰符有三个:
- i:忽略大小写匹配,默认匹配时区分大小写
- g:全局匹配,找到第一个匹配项后不会停止,会继续匹配后续内容
- m:多行匹配,^和$会匹配每一行的开头和结尾,而不是整个字符串的开头和结尾
示例:使用修饰符的正则创建
// 忽略大小写匹配hello
const reg3 = /hello/i;
console.log(reg3.test("Hello")); // 输出true
// 全局匹配字符串中的所有数字
const reg4 = /\d/g;
const str = "a1b2c3";
console.log(str.match(reg4)); // 输出["1", "2", "3"]创建后的正则使用示例
创建好正则表达式后,可以配合JavaScript的字符串方法或正则自身的方法完成实际业务需求,下面是常见的使用场景。
表单手机号验证
使用字面量创建正则验证手机号格式
// 匹配11位手机号,以1开头,第二位是3-9的数字,后面9位是任意数字
const phoneReg = /^1[3-9]\d{9}$/;
function checkPhone(phone) {
return phoneReg.test(phone);
}
console.log(checkPhone("13812345678")); // 输出true
console.log(checkPhone("12812345678")); // 输出false动态替换敏感词
使用构造函数动态创建正则替换敏感词
// 敏感词列表
const sensitiveWords = ["广告", "垃圾"];
// 拼接成正则字符串,用|分隔表示或关系
const sensitiveRegStr = sensitiveWords.join("|");
// 创建全局匹配的正则
const sensitiveReg = new RegExp(sensitiveRegStr, "g");
const content = "这是一条垃圾广告内容";
const filteredContent = content.replace(sensitiveReg, "**");
console.log(filteredContent); // 输出"这是一条****内容"注意事项
在使用RegExp构造函数创建正则时,如果正则内容中包含反斜杠,需要在字符串中额外转义,比如要匹配\d,字符串中需要写成\\d,否则会被当作普通字符处理。另外,字面量方式创建的正则如果内容需要动态变化,必须改用构造函数方式,不能尝试在字面量中拼接变量,这是无效语法。
JavaScript正则表达式RegExp正则匹配正则语法修改时间:2026-05-29 03:36:25