JavaScript中的RegExp是正则表达式的内置对象,用于定义字符串的匹配规则,可实现字符串校验、内容提取、批量替换等常见操作,是处理字符串逻辑的重要工具。

RegExp的创建方式
JavaScript中创建RegExp对象有两种常用方式,分别是字面量方式和构造函数方式,两种方式适用的场景略有不同。
1. 字面量方式
直接使用两个正斜杠包裹正则规则,后面可以跟上修饰符,语法简洁适合写固定的正则规则。
// 匹配字符串中的数字,忽略大小写的修饰符在这里不适用,仅举例修饰符位置 const reg1 = /\d+/; // 匹配以a开头的字符串,i修饰符表示忽略大小写 const reg2 = /^a/i;
2. 构造函数方式
通过new RegExp()创建,第一个参数是正则规则字符串,第二个参数是可选的修饰符,适合需要动态拼接规则的场景。
// 动态匹配用户输入的关键词,需要转义特殊字符
const keyword = 'test.dot';
// 字符串中反斜杠需要转义,所以\d要写成\\d
const reg3 = new RegExp('\\d+' + keyword, 'g');RegExp的核心方法
RegExp对象本身提供了test和exec两个核心方法,同时字符串对象也提供了多个和正则配合的方法,使用时需要注意两者的差异。
test方法
用于检测字符串是否匹配正则规则,返回布尔值,适合做校验类场景。
const phoneReg = /^1[3-9]\d{9}$/;
console.log(phoneReg.test('13800138000')); // true
console.log(phoneReg.test('12345678901')); // falseexec方法
用于在字符串中执行匹配,返回匹配结果的数组,没有匹配到则返回null,支持全局匹配时逐步遍历结果。
const str = 'a1 b2 c3';
const numReg = /\d/g;
let result;
while ((result = numReg.exec(str)) !== null) {
console.log('匹配到数字:', result[0], '位置:', result.index);
}
// 输出:
// 匹配到数字: 1 位置: 1
// 匹配到数字: 2 位置: 4
// 匹配到数字: 3 位置: 7字符串和正则配合的方法
字符串的match、replace、search、split方法都可以接收RegExp对象作为参数,实现不同的字符串操作。
- match方法:返回字符串中匹配正则的结果数组,和exec类似但使用方式不同
- replace方法:根据正则规则替换字符串中的匹配内容
- search方法:返回正则匹配到的第一个位置索引,没有则返回-1
- split方法:按照正则规则分割字符串为数组
const content = '姓名:张三,年龄:20,邮箱:zhangsan@ipipp.com';
// 提取邮箱
const emailReg = /[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}/;
const email = content.match(emailReg)[0];
console.log(email); // zhangsan@ipipp.com
// 替换所有数字为*
const replaceStr = content.replace(/\d/g, '*');
console.log(replaceStr); // 姓名:张三,年龄:**,邮箱:zhangsan@ipipp.com常用修饰符说明
正则规则后面的修饰符可以改变匹配的行为,常用的修饰符有三个:
| 修饰符 | 作用 |
|---|---|
| g | 全局匹配,查找所有匹配项而不是找到第一个就停止 |
| i | 忽略大小写,匹配时不区分字母的大小写 |
| m | 多行匹配,让^和$可以匹配每一行的开头和结尾 |
实际应用场景举例
下面以表单校验为例,展示RegExp的实际使用方式,校验手机号、邮箱和用户名是否符合规则。
// 表单校验函数
function validateForm(data) {
const rules = {
phone: /^1[3-9]\d{9}$/,
email: /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/,
username: /^[a-zA-Z\u4e00-\u9fa5]{2,10}$/ // 2-10位的字母或中文
};
const errors = {};
for (const key in rules) {
if (data[key] && !rules[key].test(data[key])) {
errors[key] = `${key}格式不正确`;
}
}
return {
isValid: Object.keys(errors).length === 0,
errors
};
}
// 测试校验
const formData = {
phone: '13800138000',
email: 'test@ipipp.com',
username: '张三1'
};
console.log(validateForm(formData));
// 输出:{ isValid: true, errors: {} }使用RegExp时需要注意特殊字符的转义,比如.、*、+等字符在正则中有特殊含义,如果需要匹配本身需要加反斜杠转义。另外动态生成正则时,构造函数中的规则字符串需要手动转义反斜杠,避免规则失效。
RegExp正则表达式JavaScript正则匹配修改时间:2026-06-05 02:20:16