正则表达式是JavaScript中处理字符串的强大工具,广泛应用于表单验证、数据提取、文本搜索与替换等场景。本文将系统讲解JS正则表达式的使用方法,帮助您快速掌握这一核心技能。
正则表达式(Regular Expression)是一种用于匹配字符串中字符组合的模式。在JavaScript中,正则表达式也是对象,可以通过字面量语法或构造函数创建。
// 语法:/pattern/flags
var regex = /abc/gi;
var result = "ABCabc".match(regex);
console.log(result); // ["ABC", "abc"]
// 语法:new RegExp(pattern, flags)
var regex = new RegExp("abc", "gi");
var result = "ABCabc".match(regex);
console.log(result); // ["ABC", "abc"]
检测字符串是否匹配模式,返回布尔值:
var pattern = /hello/;
console.log(pattern.test("hello world")); // true
console.log(pattern.test("hi world")); // false
执行搜索匹配,返回包含匹配信息的数组或null:
var pattern = /\d+/g;
var str = "2023年5月20日";
var result = pattern.exec(str);
console.log(result); // ["2023"]
字符串方法,返回匹配结果数组:
var str = "价格:¥199,优惠价:¥159";
var matches = str.match(/\d+/g);
console.log(matches); // ["199", "159"]
字符串替换方法:
var str = "Hello World";
var newStr = str.replace(/world/i, "JavaScript");
console.log(newStr); // "Hello JavaScript"
搜索匹配位置,返回索引或-1:
var str = "JavaScript正则表达式";
var pos = str.search(/正则/);
console.log(pos); // 10
使用正则分割字符串:
var str = "apple,banana;orange|grape";
var arr = str.split(/[,;|]/);
console.log(arr); // ["apple", "banana", "orange", "grape"]
// 匹配数字
/\d/ // 匹配单个数字
/\D/ // 匹配非数字
// 匹配单词字符
/\w/ // 匹配字母、数字、下划线
/\W/ // 匹配非单词字符
// 匹配空白字符
/\s/ // 匹配空格、制表符、换行符
/\S/ // 匹配非空白字符
// 匹配0次或多次
/a*/
// 匹配1次或多次
/a+/
// 匹配0次或1次
/a?/
// 匹配n次
/a{3}/
// 匹配n到m次
/a{2,4}/
// 匹配至少n次
/a{2,}/
// 匹配开头
/^abc/
// 匹配结尾
/xyz$/
// 单词边界
/\bword\b/
// 非单词边界
/\Bword\B/
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
function validatePhone(phone) {
var pattern = /^1[3-9]\d{9}$/;
return pattern.test(phone);
}
console.log(validatePhone("13800138000")); // true
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"}
function formatNumber(num) {
return num.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
}
console.log(formatNumber(1234567.89)); // "1,234,567.89"
// 贪婪匹配(默认)
var str = "content1content2";
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"]
八、性能优化建议
- 预编译常用正则表达式,避免重复创建
- 避免过度使用通配符和回溯
- 使用具体字符类代替通用字符类
- 合理使用锚点提高匹配效率
- 对长文本使用非贪婪匹配
九、调试工具推荐
- RegExr:在线正则表达式测试工具
- Regex101:功能强大的正则表达式测试器
- 浏览器开发者工具:Console面板直接测试
通过本文的学习,您已经掌握了JS正则表达式的基本用法和高级技巧。正则表达式虽然学习曲线较陡,但一旦掌握,将极大提升您的字符串处理能力。建议多加练习,在实际项目中不断应用,逐步提升正则表达式的运用水平。
推荐文章
-
02-26Recovery文件夹是什么?C盘Recovery文件夹可以删除吗?详解与安全指南
-
02-26电脑字体在哪里?如何管理和安装字体?- 详细图文教程
-
02-26全方位解析:如何在电脑上畅玩侠盗猎车手系列游戏 | 配置优化与问题解决指南
-
02-26如何在电脑版上获取和使用WiFi钥匙:全方位指南
-
02-26笔记本怎么激活Windows 10?官方正版激活全攻略
-
02-26Win7系统如何扫描文件?电脑扫描文件到电脑的详细图文教程
-
02-26重装Win7系统步骤教程(详细指南让你轻松重装Win7系统)
-
02-26电脑频繁自动重启的原因及解决方法大全 | IT工程师专业指南
-
02-26如何选择适合你的笔记本电脑音箱?选购指南与技巧
-
02-26Win11怎么关闭磁盘默认共享?详细图文教程
热门文章
-
1
08-06俄罗斯引擎Yandex官网入口及使用指南 - 全球领先俄语搜索引擎
-
2
07-26Yandex入口登录指南 - 快速进入Yandex官网的正确方式
-
3
08-09Yandex入口地址大全 - 最新Yandex官网登录入口汇总
-
4
08-08俄罗斯引擎Yandex官网入口及使用指南 - 最全面的中文访问教程
-
5
07-16俄罗斯搜索引擎Yandex免费入口链接 - 无需翻墙直接访问
-
6
07-08Yandex网页版入口 - 俄罗斯最大搜索引擎官方访问指南
-
7
07-22Yandex网页版登录界面入口 - 快速访问俄罗斯最大搜索引擎
-
8
08-21俄罗斯搜索引擎网址及入口地址大全 - 快速访问指南
-
9
07-24俄罗斯搜索引擎有哪些?五大俄罗斯搜索引擎详解
-
10
07-19镜面AO3官网入口 - 最新可用网址及访问方法