正则表达式是一种在文本中查找和替换特定字符串的强大工具。
在JavaScript中,正则表达式被广泛应用于验证输入、搜索文本、提取信息等场景。
本文将详细介绍JavaScript正则表达式的语法及其应用实例。
1. 正则表达式基本概念
1.1 创建正则表达式
在JavaScript中,有两种方法创建正则表达式对象:
- 字面量:
var regex = /pattern/flags;
- 构造函数:
var regex = new RegExp('pattern', 'flags');
其中,pattern
是正则表达式的模式,flags
是可选的标志。
1.2 标志
正则表达式可用的标志如下:
g
:全局匹配(global)i
:不区分大小写匹配(case-insensitive)m
:多行模式匹配(multiline)
2. 常用元字符和特殊字符
2.1 元字符
元字符是具有特殊含义的字符,以下是常用的元字符:
.
:匹配除换行符之外的任意字符^
:匹配字符串开头$
:匹配字符串结尾*
:匹配前面的字符0次或多次+
:匹配前面的字符1次或多次?
:匹配前面的字符0次或1次{n}
:匹配前面的字符恰好n次{n,}
:匹配前面的字符至少n次{n,m}
:匹配前面的字符至少n次,最多m次
2.2 特殊字符
以下是常用的特殊字符:
d
:匹配数字字符D
:匹配非数字字符w
:匹配字母、数字、下划线W
:匹配非字母、数字、下划线s
:匹配空白字符(空格、制表符、换行符等)S
:匹配非空白字符b
:匹配单词边界B
:匹配非单词边界
3. 分组和捕获
3.1 分组
使用圆括号()
可以将多个字符组成一个分组。例如,正则表达式/(ab)+/
匹配一个或多个连续的”ab”。
3.2 捕获
分组还可以用于捕获匹配的子字符串,使用RegExp
对象的exec()
方法或字符串的match()
方法可获取捕获的子字符串。
4. 替换和查找
JavaScript中常用的正则表达式相关方法有replace()
、search()
、match()
和test()
等。
4.1 使用replace()替换文本
replace()
方法可以根据正则表达式替换匹配的字符串:
var str = "Hello, World!";
var newStr = str.replace(/world/i, "JavaScript");
console.log(newStr); // "Hello, JavaScript!"
4.2 使用search()查找匹配位置
search()
方法返回正则表达式匹配的第一个子字符串的位置:
var str = "Hello, World!";
var pos = str.search(/world/i);
console.log(pos); // 7
4.3 使用match()提取匹配字符串
match()
方法可以提取匹配正则表达式的子字符串:
var str = "JavaScript is awesome!";
var result = str.match(/w+/g);
console.log(result); // ["JavaScript", "is", "awesome"]
4.4 使用test()检查匹配
test()
方法检查正则表达式是否匹配一个字符串:
var regex = /d+/;
console.log(regex.test("123")); // true
console.log(regex.test("abc")); // false
5. 断言
断言用于在正则表达式中检查某个位置的前后字符,但不消耗字符。
5.1 先行断言(正向肯定)
使用(?=...)
进行正向肯定断言。例如,正则表达式/d+(?=%)/
匹配一个数字,后面紧跟一个百分号:
var str = "50% off!";
var result = str.match(/d+(?=%)/);
console.log(result); // ["50"]
5.2 先行断言(正向否定)
使用(?!...)
进行正向否定断言。例如,正则表达式/d+(?!%)/
匹配一个数字,后面不跟百分号:
var str = "Price: 50 USD";
var result = str.match(/d+(?!%)/);
console.log(result); // ["50"]
6. 实例应用
以下是一些常见的正则表达式实例:
- 邮箱验证:
/^[w-]+(.[w-]+)*@[w-]+(.[w-]+)+$/
- 手机号验证:
/^1[3-9]d{9}$/
- URL验证:
/^(https?://)?([da-z.-]+).([a-z.]{2,6})([/w .-]*)*/?$/
通过学习和掌握正则表达式的语法及其实际应用,可以在日常编程中提高代码的效率和质量。