正则表达式
正则表达式是一种用于匹配和操作文本的强大工具,它是由一系列字符和特殊字符组成的模式,用于描述要匹配的文本模式。
正则表达式可以在文本中查找、替换、提取和验证特定的模式。
构造正则表达式的方法和创建数学表达式的方法一样。也就是用多种元字符与运算符可以将小的表达式结合在一起来创建更大的表达式。正则表达式的组件可以是单个的字符、字符集合、字符范围、字符间的选择或者所有这些组件的任意组合。
正则表达式是由普通字符(例如字符 a 到 z)以及特殊字符(称为"元字符")组成的文字模式。模式描述在搜索文本时要匹配的一个或多个字符串。正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。
-
正则表达式.test(字符串) 返回布尔值
-
|符 ,搜索多个规则,比如/yes|no/
-
i标识符 忽略大小写 比如/ignorecase/i
-
字符串.match(正则表达式) 返回匹配的数组
-
g标识符 可以全局搜索多次或者多个匹配的字符 /repeat/g
-
.通配符 可以匹配任何一个字符 /hu./
-
[ ]字符集 可以更灵活的匹配字符 单个字符与多种可能性匹配 比如匹配bag或big或bug 可以使用正则表达式/b[aiu]g/来执行
-
连字符- 比如匹配小写字母a到e 可以使用[a-e] 比如匹配0到10/[0-10]/ 包括0和10
-
[^]否定字符集 即匹配不包括在字符集里的字符
-
+字符 匹配出现一次或多次的字符 例如 /a+/g 可以匹配到a或aa或aaaa…
-
*字符 匹配出现0次或者多次的字符
-
?懒惰匹配符 正则表达式默认式贪婪匹配,即匹配到满足正则表达式的最长字符串,加了?变为懒惰匹配,匹配到满足条件的字符串最小可能部分
-
^字符 匹配文本是否在字符串的开始位置 /^Ricky/ 就要以Ricky开头
-
$ 字符 匹配文本是否在字符串的开始位置 /Ricky$/ 就要以Ricky结尾
-
\w元字符 相当于[A-Za-z0-9_] 注意是包含下划线的
-
\W元字符 相当于和\w相反的匹配模式 相当于[ ^ A-Za-z0-9_]
-
\d字符 匹配所有单个数字即0到9 即[0-9]
-
\D字符 匹配所有的不是0到9的单个字符 [ ^ 0-9]
-
\s字符 匹配空格字符
-
\S字符 匹配非空格字符
-
{ }数量说明符 花括号之间放两个数字,代表数字的下限和上限
-
区间 例如,要匹配出现 3 到 5次字母 a 的在字符串 ah,正则表达式应为/a{3,5}h/
-
下限 如果是{3, }只匹配下限,表示至少出现3次字母a
-
指定 如果是{3},表示只匹配出现对应字母三次的字符串 例如/ha{3}h/
-
-
?可选符 检查?前面的0个或1个元素,可以视为?前面的元素是可选的
例如/colou?r/ 可以匹配 color 和 colour
-
(?= … )正向先行判断符 正向先行断言会查看并确保搜索匹配模式中的元素存在,但实际上并不匹配。 正向先行断言的用法是 (?=…),其中 … 就是需要存在但不会被匹配的部分。 比如/q(?=u)/ 对于qu来说,返回的是q
-
(?!=…)负向先行判断符 另一方面,负向先行断言会查看并确保搜索匹配模式中的元素不存在。 负向先行断言的用法是 (?!..),其中 … 是希望不存在的匹配模式。 如果负向先行断言部分不存在,将返回匹配模式的其余部分。 比如/q(?!=…) 对应字符串qt 返回就是q
-
( )符 可以检查混合字符串 比如/P(engu|umpk)in/g 匹配Penguin或Pumpkin
-
()捕获组 \1\2符
-
捕获组是将要捕获的表达式在括号里构建例如,通过正则表达式 (\d{2})-(\d{2})-(\d{4})和替换字符串 \3-\2-\1,可以将 “12-31-2022” 替换为 “2022-31-12”。
-
常见用法是捕获不确定的重复字符,比如 /^(\d+) \1 \1$/就是匹配一个只由相同的数字重复三次组成的由空格分隔字符串
-
repeatStr.match(repeatRegex); // Returns [“row row row”, “row”]
.match方法返回一个数组,内容是匹配到的字符子串和其捕获组
-
-
.replace( ,)方法
字符串上使用 .replace()方法来搜索并替换字符串中的文本 replace(正则表达式匹配模式,替换匹配的字符串)
例如
let wrongText = "The sky is silver."; let silverRegex = /silver/; wrongText.replace(silverRegex, "blue");
wrongText将返回字符串 The sky is blue
-
.replace方法中$符号
$符号可以替换字符串的捕获组,从而实现顺序的更改或者替换更方便
"Code Camp".replace(/(\w+)\s(\w+)/, '$2 $1');
这样就会返回字符串Camp Code