正则表达式
正则的规则,三大宏观规则、两大微观规则
交集规则
类似于编程 "与" (A&B)
A是正则,B是正则,AB是交集正则,即表明,AB都要满足才可。
并集规则
类似于编程 "或" (A|B)
A是正则,B是正则,A|B是并集正则,即表明,A|B == [AB] 只要满足一个即可。
补集规则
类似于编程 "非" !A
A是正则 [^AB] 匹配不等于A或者等于B
A|B|[^C]D 匹配 等于A或等于B或者不能是C但要匹配D
单字节规则
数字:0|1|2|3|4|5|6|7|8|9 = [0-9] = \d 取反=\D
字母:[a-z] [a-zA-Z]=\a 取反=\A
[a-zA-Z0-9] = \w 取反=\W
空格、水平制表符、回车、换行 [ \t\r\n\v\f]=\s 取反=\S
重复多次展示
[0-9]{1,2} = \d{1,2} 正则1位或2位数字
[0-9][0-9] = [0-9]{2,2} = \d{2,2} = \d{2} 正则2位数字
符号
+:\d+ 正则至少出现1位数字
:ab 正则b出现多次或不出现
?:ab? 正则b出现1次或不出现
贪心符号"?"
并非上面的?
<h1>this is a title</h1><p>this is content</p>
要求:匹配h1标签
<h1>.*?> 匹配<h1>this is a title</h1>
引用
数字1为前面括号的索引
<h1>this is a title</h1><h1>this is content</h2>
<(h1)>.*<[\/]\1> <h1>this is a title</h1>
环视
向前肯定环视
dooabc123dooabc
要求:只匹配第一个abc
正则:abc(?=123)
向前否定环视
dooabc123dooabc
要求:abc后面再没有abc,才匹配对应的abc,改文本,匹配的是最后一个abc
正则:abc(?!123)
后向肯定环视(后向即向左)
dooqwe123abc
要求:寻找123 ,并看向后有没有遇到qwe,遇到才算成功
正则(?>=qwe)123
后向否定环视
dooaaa123abc
要求:寻找123,并向后有没有qwe,没有遇到才成功
正则:(?<!qwe)123
使用环视:
查看单词是否有边界
正则:(?<=\W)(?=\w)|(?<=\w)(?=\W)
简写:\b
foo bar
正则:\bbar只会匹配 bar
开始符:(?<!.)(?=.) = ^
结束符:(?<=.)(?!.) = $
例子
匹配,提取字符串 Pushing testchart-0.2.0.tgz to 135884-ijx_uat...\nDone.\n
正则:Pushing\s+(.?)-(.?).tgz\s+to\s+(.*?).
const s = Pushing testchart-0.2.0.tgz to 135884-ijx_uat...\nDone.\n
/Pushing\s+(.*?)-(.*?).tgz\s+to\s+(.*?)\./.exec(s)
结果:
['Pushing testchart-0.2.0.tgz to 135884-ijx_uat.', 'testchart', '0.2.0', '135884-ijx_uat', index: 0, input: 'Pushing testchart-0.2.0.tgz to 135884-ijx_uat...\nDone.\n', groups: undefined]
匹配:开始和结尾必须是字符串或数字,中间有-或者. 并且不能连在一起,并且必须是数字或字母
正则^a-z0-9?(.a-z0-9?)*$
评论区