正则表达式

定义语法

项目内容
定义语法const 变量名 = /表达式/
说明其中 / 是正则表达式字面量
示例const reg = /前端/

元字符

元字符概念

类型说明示例
普通字符大多数字符只能描述它们本身,例如所有的字母和数字a, b, 1, 2
元字符(特殊字符)一些具有特殊含义的字符,可以极大提高灵活性和强大的匹配功能[a-z] 表示匹配所有小写字母

元字符分类

分类说明
边界符表示位置,开头和结尾,必须用什么开头,用什么结尾
量词表示重复次数
字符类比如 \d 表示 0-9

边界符

边界符说明
^表示匹配行的文本(以谁开始)
$表示匹配行的文本(以谁结束)

说明:如果 ^ 和 $ 在一起,表示必须是精确匹配。

量词

量词说明
*重复零次或多次
+重复一次或多次
?重复零次或一次
{n}重复 n 次
{n,}重复 n 次或更多次
{n,m}重复 n 到 m 次

字符类

字符类说明示例
[]匹配字符集合,后面的字符串只要包含里面的任意字符出现都返回为 true/[abc]/.test('andy') // true
/[abc]/.test('baby') // true
/[abc]/.test('cry') // true
/[abc]/.test('die') // false
-在字符类中表示一个范围[a-z] 表示匹配所有小写字母
[A-Z] 表示匹配所有大写字母
[0-9] 表示匹配所有数字
[a-zA-Z0-9] 表示匹配所有字母和数字

修饰符

修饰符说明示例
iignore 的缩写,正则匹配时字母不区分大小写/a/i.test('A') // true
gglobal 的缩写,匹配所有满足正则表达式的结果'ababa'.replace(/a/g, 'x') // 'xbxbx'

语法: /表达式/修饰符

预定义字符类

预定义类说明等价于
\d匹配 0-9 之间的任意数字[0-9]
\D匹配 0-9 以外的任意字符[^0-9]
\w匹配任意的字母、数字和下划线[A-Za-z0-9_]
\W匹配字母、数字、下划线以外的字符[^A-Za-z0-9_]
\s匹配空格(包括换行符、制表符、空格符等)[\t\r\n\v\f]
\S匹配非空格的字符[^\t\r\n\v\f]

常用方法

test() 方法

方法语法说明
test()regObj.test(被检测的字符串)用来查看正则表达式与指定的字符串是否匹配,返回布尔值

replace() 方法

方法语法说明
replace()字符串.replace(正则表达式, 替换的内容)用来替换字符串中匹配正则表达式的部分,返回替换后的新字符串

高级用法:

功能语法说明
全局替换str.replace(/andy/g, 'baby')使用 g 标志进行全局替换
忽略大小写str.replace(/andy/i, 'baby')使用 i 标志忽略大小写
全局忽略大小写str.replace(/andy/gi, 'baby')同时使用 g 和 i 标志
替换所有数字str.replace(/\d/g, '*')使用 \d 匹配所有数字并替换为 *

分组

分组概念

概念说明示例
分组使用 () 可以创建分组,分组可以将多个字符作为一个整体进行处理/(ab)+/ 表示匹配连续出现的 ab
分组捕获分组会捕获匹配的内容,可以在替换时使用 $1, $2 等引用捕获的内容'2023-01-01'.replace(/(\d{4})-(\d{2})-(\d{2})/, '$2/$3/$1') // 结果为 '01/01/2023'

高级用法

日期格式转换:

javascript
// 将 2023-01-01 转换为 01/01/2023
'2023-01-01'.replace(/(\d{4})-(\d{2})-(\d{2})/, '$2/$3/$1')
// 结果: '01/01/2023'

提取邮箱用户名:

javascript
// 从邮箱地址中提取用户名
'example@domain.com'.replace(/(\w+)@(\w+\.\w+)/, '$1')
// 结果: 'example'

姓名反转:

javascript
// 将 "John Doe" 转换为 "Doe, John"
'John Doe'.replace(/(\w+)\s(\w+)/, '$2, $1')
// 结果: 'Doe, John'

重复字符匹配:

javascript
// 匹配连续出现的 "ab"
/(ab)+/.test('ababab')  // true
/(ab)+/.test('abc')     // true
/(ab)+/.test('a')       // false

非捕获分组

语法说明示例
(?:表达式)非捕获分组,不创建捕获组/(?:ab)+/.test('abab') // true

嵌套分组

javascript
// 分组可以嵌套使用
'2023-01-01'.match(/(\d{4}-(\d{2})-(\d{2}))/)
// 结果: ['2023-01-01', '2023-01-01', '01', '01']
// match[0] 是完整匹配
// match[1] 是第一个分组 (\d{4}-(\d{2})-(\d{2}))
// match[2] 是第二个分组 (\d{2})
// match[3] 是第三个分组 (\d{2})