插件窝 干货文章 JS正则表达式怎么用?从入门到精通完整指南

JS正则表达式怎么用?从入门到精通完整指南

JS正则表达式怎么用?从入门到精通完整指南

正则表达式是JavaScript中处理字符串的强大工具,广泛应用于表单验证、数据提取、文本搜索与替换等场景。本文将系统讲解JS正则表达式的使用方法,帮助您快速掌握这一核心技能。

一、什么是正则表达式?

正则表达式(Regular Expression)是一种用于匹配字符串中字符组合的模式。在JavaScript中,正则表达式也是对象,可以通过字面量语法或构造函数创建。

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

1. 字面量语法

// 语法:/pattern/flags
var regex = /abc/gi;
var result = "ABCabc".match(regex);
console.log(result); // ["ABC", "abc"]

2. 构造函数语法

// 语法:new RegExp(pattern, flags)
var regex = new RegExp("abc", "gi");
var result = "ABCabc".match(regex);
console.log(result); // ["ABC", "abc"]

三、常用正则表达式方法

1. test() 方法

检测字符串是否匹配模式,返回布尔值:

var pattern = /hello/;
console.log(pattern.test("hello world")); // true
console.log(pattern.test("hi world")); // false

2. exec() 方法

执行搜索匹配,返回包含匹配信息的数组或null:

var pattern = /\d+/g;
var str = "2023年5月20日";
var result = pattern.exec(str);
console.log(result); // ["2023"]

3. match() 方法

字符串方法,返回匹配结果数组:

var str = "价格:¥199,优惠价:¥159";
var matches = str.match(/\d+/g);
console.log(matches); // ["199", "159"]

4. replace() 方法

字符串替换方法:

var str = "Hello World";
var newStr = str.replace(/world/i, "JavaScript");
console.log(newStr); // "Hello JavaScript"

5. search() 方法

搜索匹配位置,返回索引或-1:

var str = "JavaScript正则表达式";
var pos = str.search(/正则/);
console.log(pos); // 10

6. split() 方法

使用正则分割字符串:

var str = "apple,banana;orange|grape";
var arr = str.split(/[,;|]/);
console.log(arr); // ["apple", "banana", "orange", "grape"]

四、正则表达式修饰符(Flags)

  • g:全局匹配,查找所有匹配项
  • i:忽略大小写
  • m:多行匹配
  • s:允许点号匹配换行符
  • u:使用Unicode模式
  • y:粘性匹配

五、常用正则表达式模式

1. 字符类

// 匹配数字
/\d/  // 匹配单个数字
/\D/  // 匹配非数字

// 匹配单词字符
/\w/  // 匹配字母、数字、下划线
/\W/  // 匹配非单词字符

// 匹配空白字符
/\s/  // 匹配空格、制表符、换行符
/\S/  // 匹配非空白字符

2. 量词

// 匹配0次或多次
/a*/  

// 匹配1次或多次
/a+/  

// 匹配0次或1次
/a?/  

// 匹配n次
/a{3}/  

// 匹配n到m次
/a{2,4}/  

// 匹配至少n次
/a{2,}/

3. 位置匹配

// 匹配开头
/^abc/  

// 匹配结尾
/xyz$/  

// 单词边界
/\bword\b/  

// 非单词边界
/\Bword\B/

六、实际应用示例

1. 邮箱验证

function validateEmail(email) {
    var pattern = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/;
    return pattern.test(email);
}
console.log(validateEmail("test@example.com")); // true

2. 手机号验证

function validatePhone(phone) {
    var pattern = /^1[3-9]\d{9}$/;
    return pattern.test(phone);
}
console.log(validatePhone("13800138000")); // true

3. 提取URL参数

function getUrlParams(url) {
    var params = {};
    var pattern = /[?&]([^=#]+)=([^&#]*)/g;
    var match;
    while (match = pattern.exec(url)) {
        params[match[1]] = match[2];
    }
    return params;
}
console.log(getUrlParams("?name=张三&age=25")); // {name: "张三", age: "25"}

4. 格式化数字(千分位)

function formatNumber(num) {
    return num.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
}
console.log(formatNumber(1234567.89)); // "1,234,567.89"

七、常见问题与技巧

1. 贪婪匹配 vs 非贪婪匹配

// 贪婪匹配(默认)
var str = "
content1
content2
"; var greedy = str.match(/
.*<\/div>/)[0]; console.log(greedy); // 匹配整个字符串 // 非贪婪匹配(加?) var nonGreedy = str.match(/
.*?<\/div>/)[0]; console.log(nonGreedy); // 只匹配第一个
content1

2. 分组与捕获

var str = "2023-05-20";
var pattern = /(\d{4})-(\d{2})-(\d{2})/;
var match = str.match(pattern);
console.log(match[1]); // "2023"
console.log(match[2]); // "05"
console.log(match[3]); // "20"

3. 前瞻与后顾断言

// 正向肯定前瞻
var str = "100元 200美元 300欧元";
var result = str.match(/\d+(?=元)/g);
console.log(result); // ["100"]

// 正向否定前瞻
var result2 = str.match(/\d+(?!元)/g);
console.log(result2); // ["20", "0", "30", "0"]

八、性能优化建议

  1. 预编译常用正则表达式,避免重复创建
  2. 避免过度使用通配符和回溯
  3. 使用具体字符类代替通用字符类
  4. 合理使用锚点提高匹配效率
  5. 对长文本使用非贪婪匹配

九、调试工具推荐

  • RegExr:在线正则表达式测试工具
  • Regex101:功能强大的正则表达式测试器
  • 浏览器开发者工具:Console面板直接测试

通过本文的学习,您已经掌握了JS正则表达式的基本用法和高级技巧。正则表达式虽然学习曲线较陡,但一旦掌握,将极大提升您的字符串处理能力。建议多加练习,在实际项目中不断应用,逐步提升正则表达式的运用水平。