正则表达式(Regular Expression,简称Regex或RegExp)是一种强大的文本匹配工具,用于在字符串中查找、替换和验证模式。在JavaScript中,我们可以使用内置的正则表达式对象来处理字符串。本文将介绍JavaScript中正则表达式的API、使用方法以及一些常见的正则知识。
正则表达式
正则表达式由字母和特殊字符(元字符)组成,用于描述字符串的模式。以下是一些基本的元字符:
正则元字符
元字符 | 功能 |
---|---|
. | 通配符,匹配单个任意字符,除换行符以外 |
^ | 匹配以什么开头 |
$ | 匹配以什么结尾 |
* | 匹配0到多次的重复(贪婪模式) |
+ | 匹配1到多次重复(贪婪模式) |
? | 匹配0到1次重复(贪婪模式) |
*?,+?,??,{m,n}? | 优先匹配最少次(非贪婪模式) |
{n, m} | 匹配n到m次重复,如果只有一个参数,则匹配固定n次重复 |
[ab] | 字符集,匹配方括号内任意一个字符(or),只有元字符(-至,^非 ,\转义)生效 |
() | 组,作为组合封装 |
| | 或 |
\ | 反斜杠后跟元字符,则去除元字符的功能 反斜杠后跟普通字符,则实现特殊功能 |
字符类和转义字符也是正则表达式的重要组成部分,它们用于匹配特定的字符集合。
JavaScript中的正则表达式还支持一些修饰符,用于调整匹配行为:
- i:忽略大小写。
- g:全局匹配,查找所有匹配而不是在找到第一个匹配后停止。
- m:多行匹配。
转义字符
转义字母 | 功能 | 等价 |
---|---|---|
\d | 匹配任何十进制数 | [0-9] |
\D | 匹配任何非十进制数 | [^0-9] |
\s | 匹配任何空白字符 | [ \t\n\f\v] |
\S | 匹配任何非空白字符 | [^ \t\n\f\v] |
\w | 匹配任何字母数字下划线字符 | [a-zA-Z0-9_] |
\W | 匹配任何非字母数字下划线字符 | [^a-zA-Z0-9_] |
\b | 匹配一个单词边界,也就是单词和空格间的位置 |
匹配模式
模式(完整写法) | 功能 |
---|---|
I(re.IGNORECASE) | 忽略大小写 |
M(MULTILINE) | 多行模式,改变'^'和'$'的行为(参见上图) |
S(DOTALL) | 点任意匹配模式,改变'.'的行为 |
JS中的正则
JavaScript中的正则表达式对象JavaScript中的正则表达式对象是RegExp类型的实例。我们可以使用字面量或构造函数来创建正则表达式。以下是一些常用的正则表达式方法:
- 创建正则表达式:
// 使用字面量创建正则表达式:
const pattern = /abc/;
// 使用构造函数创建正则表达式:
const pattern = new RegExp('abc');
- 测试字符串是否匹配模式:
使用test方法检查字符串是否匹配模式:
const str = 'abcdef';
const isMatch = pattern.test(str);
console.log(isMatch); // true
- 查找匹配项:
使用exec方法查找匹配项:
const result = pattern.exec('abcdef');
console.log(result[0]); // 'abc'
- 替换字符串中的匹配项:
使用replace方法替换匹配项:
const replacedStr = 'abcdef'.replace(pattern, 'xyz');
console.log(replacedStr); // 'xyzdef'
- 方法速查表
方法名 | 功能 |
---|---|
re.match() | 从字符串开始匹配 |
re.search() | 搜索整个字符串 |
re.findall() | 匹配所有字符串中符合的字符串 |
re.finditer() | 匹配所有字符串中符合的字符串,并以迭代器的形式返回 |
re.compile() | 将正则表达式编译成RegexObject对象直接使用,预编译以调高效率 |
re.split() | 根据匹配到的内容,切分字符串 |
re.sub() | 找到后并替换 |
re.purge() | 清除缓存中的正则表达式 |
re.escape() | 匹配所有所有反斜杠后的所有非字母数字的字符串 |
group() | 返回正则表达式中定义了的组(即()),group(0)永远是原始字符串,group(n)则表示第n个子串 |
groups() | 以元祖的形式返回每一个子串 |
常见的正则表达式案例
- 验证邮箱格式:
const emailPattern = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/;
const isValidEmail = emailPattern.test('example@email.com');
- 提取URL中的域名:
const url = 'https://www.example.com/path/to/resource';
const domain = url.match(/:\/\/(.[^/]+)/)[1];
- 匹配手机号码:
const phonePattern = /^(\+\d{1,2})?\d{10}$/;
const isValidPhone = phonePattern.test('+1234567890');
- 验证密码强度(至少包含一个大写字母、一个小写字母和一个数字):
const passwordPattern = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d).{8,}$/;
const isValidPassword = passwordPattern.test('SecurePass123');
- 提取HTML标签中的内容:
const html = '<p>Hello, <strong>world</strong>!</p>';
const content = html.match(/<[^>]*>([^<]*)<\/[^>]*>/)[1];
本篇已被阅读 次