正则表达式
正则表达式是一种强大的工具,用于定义文本模式,你可以使用它们来进行文本搜索、验证输入、替换文本等操作
创建正则表达式
可以使用字面量或构造函数来创建正则表达式
js
// 使用字面量
const reg = /abc/
// 使用构造函数
const reg = new RegExp('abc')修饰符
可以修改正则表达式的匹配行为
i:忽略大小写g:全局匹配,匹配所有符合条件的情况m:多行匹配
使用修饰符:
js
const reg = /abc/g
const reg = new RegExp('abc', 'g')匹配规则
符号类
| 规则 | 含义 | 示例 |
|---|---|---|
| 字面匹配 | 按照字面意义匹配自身 | /abc/,匹配字符串中的 "abc" |
. | 匹配除换行符 \n 之外的任何单个字符 | a.c,匹配 "abc"、"axc" 等字符串 |
[] | 匹配方括号内的任何一个字符 | [abc],匹配 "a"、"b" 或 "c" |
[]指定范围 | 使用连字符 - 来指定字符范围,用于匹配连续的字符 | [0-9],匹配任意一个数字字符[a-z],匹配任意一个小写字母 |
[^] | 否定字符,匹配不在方括号内的任何一个字符 | [^0-9],匹配任意一个非数字字符 |
| | 或者,表示匹配左侧或右侧的模式 | cat|dog,匹配 "cat" 或 "dog" |
() | 分组,将多个模式组合成一个整体,并可以对组内的内容应用量词 | (ab)+,匹配 "ab"、"abab"、"ababab" 等 |
^ | 开始锚点,用于匹配字符串的开头 | ^start,匹配以 "start" 开头的字符串 |
$ | 开始锚点,用于匹配字符串的结尾 | end$,匹配以 "end" 结尾的字符串 |
量词类
| 字符 | 含义 | 补充 |
|---|---|---|
{} | 量词,指定匹配次数 | {3}匹配 3 次{1,}匹配 1 次及以上{1,3}匹配 1 到 3 次 |
* | 匹配零次或多次 | 相当于 {0,} |
+ | 匹配一次或多次 | 相当于 {1,} |
? | 匹配零次或一次 | 相当于 {0,1} |
预定义字符类
| 字符 | 含义 | 补充 |
|---|---|---|
\d | 匹配任何数字字符 | 等效于 [0-9] |
\D | 匹配任何非数字字符 | 等效于 [^0-9] |
\w | 匹配任何单词字符,包括字母、数字和下划线 | 等效于 [a-zA-Z0-9_] |
\W | 匹配任何非单词字符 | 等效于 [^a-zA-Z0-9_] |
\s | 匹配任何空白字符,包括空格、制表符、换行符等 | |
\S | 匹配任何非空白字符 | |
\n | 表示换行符 | |
\t | 表示制表符 | |
\ | 转义符,将普通字符转义为特殊字符,或者将特殊字符转义为普通字符 | \.:匹配字符 .\\:匹配字符 \ |
常用方法
JavaScript 中正则表达式对象具有一些常用的方法,用于在字符串中执行匹配、替换和其他操作
test(string)
用于测试字符串 str 是否匹配正则表达式。返回一个布尔值
js
const reg = /abc/
const result = reg.test('abcdef') // truematch(reg)
在字符串中查找匹配正则的字符串,并将匹配的字符串作为数组返回。
js
const res = 'abc---abc'.match(/abc/g)
console.log(res) // ['abc', 'abc']replace(reg, replacement)
语法 str.replace(reg, replacement),将 str 中的 reg 字符串替换为 replacement 字符串,返回替换后的新字符串
- reg:可以是字符串,可以是正则表达式
- replacement:可以是字符串,可以是函数
- match:为函数时,参数 match 为每一次被匹配到的字符串
reg为字符串时,字符只会被替换一次。要执行全局搜索和替换,请使用带有 g 标志的正则表达式或使用 replaceAll()。
js
const str = 'hello, abc, abc is abcd'
const newStr = str.replace(/abc/g, 'ABC') // hello, ABC, ABC is ABCdsearch(reg)
搜索字符串中匹配正则表达式的第一个子字符串,并返回第一个匹配的索引位置。如果没有找到匹配,返回 -1。
js
const text = "Hello, my name is John."
const index = text.search(/name/) // 13