Skip to content

正则表达式

正则表达式是一种强大的工具,用于定义文本模式,你可以使用它们来进行文本搜索、验证输入、替换文本等操作

创建正则表达式

可以使用字面量或构造函数来创建正则表达式

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') // true

match(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 ABCd

search(reg)

搜索字符串中匹配正则表达式的第一个子字符串,并返回第一个匹配的索引位置。如果没有找到匹配,返回 -1

js
const text = "Hello, my name is John."
const index = text.search(/name/) // 13