[TOC]
正则表达式是由普通字符
(例如字符 a 到 z)以及特殊字符(称为"元字符"
)组成的文字模式。
普通字符
包括没有显式指定为元字符的所有可打印和不可打印字符。这包括所有大写和小写字母、所有数字、所有标点符号和一些其他符号。
Chapter 3
, Chapter 4
, Chapter 5
.
匹配除换行符(\n、\r)之外的任何单个字符非字母、数字、下划线
。等价于 '[^A-Za-z0-9_]'。x
指明的控制字符。例如,\cM 匹配一个Control-M
或回车符。x 的值必须为 A-Z 或 a-z 之一。否则,将 c 视为一个原义的 'c' 字符。默认匹配有特殊含义的字符。要匹配它们自身必须在前面加上转义字符,反斜杠\
。
例如'\n' 匹配换行符,序列 \\
匹配\
, 而 \(
则匹配 (
。
$
匹配输入字符串的结尾位置。如果设置了 RegExp 对象的 Multiline 属性,则 $
也匹配 '\n' 或 '\r'。要匹配 字符本身,请使用 `\
`。( )
标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用。*
匹配前面的子表达式零次或多次。+
匹配前面的子表达式一次或多次。?
匹配前面的子表达式零次或一次,或指明一个非贪婪限定符。.
匹配除换行符 \n 之外的任何单字符。限定符可以表示匹配次数。如果限定符出现在范围表达式之后,则表示应用于整个范围表达式,如匹配正整数用[1-9][0-9]*
,其中[1-9]设置第一个数字不是 0,[0-9]* 表示从 0 到 9 的数字重复了0次或多次。
?
匹配文件名中的 0 个或 1 个字符*
匹配0个或多个字符。+
匹配1个或者多个。{n}
n >=0 。匹配确定的n次
。例如,o{2} 不能匹配 "Bob" 中的 o,但是能匹配 "food" 中的两个 o。{n,}
n >=0 。至少
匹配n 次。例如,o{2,} 不能匹配 "Bob" 中的 o,但能匹配 "foooood" 中的所有 o。o{1,} 等价于 o+。o{0,} 则等价于 o*。{n,m}
m 和 n 均为非负整数,其中 n <= m。最少匹配 n 次且最多匹配 m 次
。例如,o{1,3} 将匹配 "fooooood" 中的前三个 o。o{0,1} 等价于 o?。请注意在逗号和两个数之间不能有空格。另外,* + ?
等限定符都是贪婪的,因为它们会尽可能多的匹配文字,只有在它们的后面加上一个?
才能实现非贪婪或最小匹配
。
例如,对于HTML的h1 标签<h1>RUNOOB-菜鸟教程</h1>
,
贪婪匹配/<.*>/
会匹配所有内容,但是加上?
后的非贪婪匹配/<.*?>/
只匹配 <h1>
。
定位符用来描述字符串或单词的边界。
$
匹配输入字符串结尾的位置。如果设置了 RegExp 对象的 Multiline 属性,$ 还会与换行符 \n 或回车符 \r 之前的位置匹配。\Bapt
匹配不出现在单词首部的字符串apt
,会匹配Chapter 中的字符串 apt,但不匹配 aptitude 中的字符串 apt。用圆括号 () 将正则表达式括起来,表示捕获相关匹配,并将其存储到一个临时缓冲区。相邻的选择项之间用 | 分隔。
所捕获的每个子匹配都按照在正则表达式模式中从左到右出现的顺序存储。缓冲区编号从 1 开始,最多可存储 99 个捕获的子表达式。每个缓冲区都可以使用 \n 访问,其中 n 为一个标识特定缓冲区的一位或两位十进制数。
例如,vscode可以用 $1
表示第一个括号匹配到的内容。
?=、?<=、?!、?<!
(\b\w+\b)(?=函数)
标记也称为修饰符,正则表达式的标记用于指定额外的匹配策略。
标记不写在正则表达式里,标记位于表达式之外/pattern/flags
正则表达式从左到右进行计算,并遵循优先级顺序。
相同优先级的从左到右进行运算,不同优先级的运算先高后低。以下从最高到最低说明其优先级顺序:
[a-zA-Z0-9_-]+
用户名由若干个字母、数字、下划线和中划线组成<img.*?src="(.*?)".*?\/?>
匹配所有 img 标签/^(Chapter|Section) [1-9][0-9]{0,1}$/
匹配章节标题。(括号不可少,因为 | 优先级最低,要么只匹配行首的单词 Chapter,要么匹配行尾的单词 Section + 后面的数字。)[\u4E00-\u9FA5]
中文^.*(?=.{6,})(?=.*\d)(?=.*[A-Z])(?=.*[a-z])(?=.*[!@#$%^&*? ]).*$
密码强度正则,最少6位,包括至少1个大写字母,1个小写字母,1个数字,1个特殊字符^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$
邮箱,html可以VScode不行?正则表达式 | 描述 |
---|---|
/\b([a-z]+) \1\b/gi | 一个单词连续出现的位置。 |
/(\w+):\/\/([^/:]+)(:\d*)?([^# ]*)/ | 匹配一个 URL 解析为协议、域、端口及相对路径。 |
`/^(?:Chapter | Section) [1-9][0-9]{0,1}$/` |
/[-a-z]/ | a 至 z 共 26个 字母再加一个 - 号。 |
/ter\b/ | 可匹配 chapter,而不能匹配 terminal。 |
/\Bapt/ | 可匹配 chapter,而不能匹配 aptitude。 |
`/Windows(?=95 | 98 |
/^\s*$/ | 匹配空行。 |
/\d{2}-\d{5}/ | 验证由两位数字、一个连字符再加 5 位数字组成的 ID 号。 |
<[a-zA-Z]+.*?>([\s\S]*?)</[a-zA-Z]*?> | 匹配 HTML 标记。 |
正则表达式 | 描述 |
---|---|
hello | 匹配 {hello} |
`gray | grey` |
`gr(a | e)y` |
gr[ae]y | 匹配 {gray, grey} |
b[aeiou]bble | 匹配 {babble, bebble, bibble, bobble, bubble} |
`[b-chm-pP]at | ot` |
colou?r | 匹配 {color, colour} |
`rege(x(es)? | xps?)` |
go*gle | 匹配 {ggle, gogle, google, gooogle, goooogle, ...} |
go+gle | 匹配 {gogle, google, gooogle, goooogle, ...} |
g(oog)+le | 匹配 {google, googoogle, googoogoogle, googoogoogoogle, ...} |
z{3} | 匹配 {zzz} |
z{3,6} | 匹配 {zzz, zzzz, zzzzz, zzzzzz} |
z{3,} | 匹配 {zzz, zzzz, zzzzz, ...} |
[Bb]rainf\*\*k | 匹配 {Brainf**k, brainf**k} |
\d | 匹配 {0,1,2,3,4,5,6,7,8,9} |
1\d{10} | 匹配 11 个数字,以 1 开头 |
`[2-9] | [12]\d |
Hello\nworld | 匹配 Hello 后跟换行符,后跟 world |
\d+(\.\d\d)? | 包含一个正整数或包含两位小数位的浮点数。 |
[^*@#] | 排除 *、@ 、# 三个特色符号 |
//[^\r\n]*[\r\n] | 匹配 // 开头的注释 |
^dog | 匹配以 "dog" 开始 |
dog$ | 匹配以 "dog" 结尾 |
^dog$ | is exactly "dog" |
vscode搜索框:(\b\w+\b)(\s*函数)
替换框:`$1`$2
其中,$1两边都有反引号`,网页渲染后可能会看不见
如果需要将“xxx函数”替换为“`xxx`函数”,可以使用以下正则表达式查找:
(\b\w+\b)(\s*函数)
替换:`$1`$2
解释:
(\b\w+\b): 匹配单词,使用了 b表示单词边界,w+表示一个或多个字母数字字符。
(\s*函数):匹配可能存在的空格和函数两个字。
替换部分使用了反向引用,$1表示第一个括号匹配到的内容,$2表示第二个括号匹配到的内容,并且使用了反斜线 转义反引号。使用方法:
打开要替换的文件。
按下 ctrl+H 或在菜单中选择“替换”选项在“查找”框中输入正则表达式:(\b\w+\b)(\s*函数)
在“替换为”框中输入替换字符串:`$1`$2, 点击“全部替换”按钮,完成替换。
注意:
如果有些函数名已经加了引号,那么这些函数名不会被替换。
如果要替换的内容中存在中文字符,需要使用UTF-8编码的文件格式。