正则小结记录

原创 Luna325 随笔 正则 123阅读 2018-01-08 10:56:55 举报

正则是什么?包含哪些规则?正则的用途是什么,主要用在哪些地方?

在线校验

什么是正则表达式

正则表达式是一种特殊的字符串模式,用于匹配一组字符串
也就是说一段正则是一双鞋子,看一个小组中是否有人刚好适合这双鞋。
其实并不难,就是一个一个字符的对比,没什么逻辑难度。
就好像一个不会英语的人看着一堆单词就头大,但知道了每个单词的含义
就会了解每一句是什么意思了。

正则的相关字符

[ol]
[li]"^" :^会匹配行或者字符串的起始位置.eg:/^3\d{2}/g 会匹配到 312345[/li]
[li]"$" :$会匹配行或者字符串的结尾。eg:/^3\d{2}$/g 因为规定了以俩数为结尾,所以匹配不到到 "312345[/li]
[li]"\b":\b匹配一个位置,匹配字符两边是否为空格[/li]
[li]"\d":\d匹配数字,eg:/0\d{2}-\d{8}|0\d{3}-\d{7}/ 匹配固定电话[/li]
[li]"\w":匹配字母(包含大小写),数字,下划线/\w/[/li]
[li]"\s":匹配字母空格,如果匹配多个空格,\s+[/li]
[li]".":匹配除了换行符和行结束符以外的任何字符。".+"匹配 "qw12 !.我的x;p[]----__ddd"[/li]
[li]"\d":\d匹配数字,eg:/0\d{2}-\d{8}|0\d{3}-\d{7}/ 匹配固定电话[/li]
[li]"[abc]":字符组,匹配包含括号内元素的字符,[]里面的每个字母是每个元素,只匹配括号内存在的字符[/li]
[li]"[^abc]":匹配任何不在[]中的字符[/li]
[li]"[0-9]":略[/li]
[li]"[a-z]":略[/li]
[li]"[A-Z]":略[/li]
[li]"[A-z]":略[/li]
[li]"(red|blue|green)":查找任何指定的选项[/li]
[li]"\n":查找换行符[/li]
[li]"\f":查找换页符[/li]
[li]"\r":查找回车符[/li]
[li]"\t":查找制表符[/li]
[/ol]

正则的几种反义

[ol]
[li]"\W" (与 "\w" 相反): 匹配任意不是数字,字母下划线的字符。" target="_blank">color=#ffc000!-=我的abc[/li]
[li]"\S" ("\s"相反): 匹配不是空格的任意字符[/li]
[li]"\D":匹配任意非数字字符[/li]
[li]"\B":匹配不是单词开头或结尾的位置. \Bis 匹配 "this is ismeis";
\Bis\B 匹配"this is ismeisis";
is\B 匹配"this isismeisis"
[/li]
[li]"[^abc]":匹配除了abc以外的任意字符(包含任意符号,空格,汉字等)[/li]
[li]"?=n":匹配任何其后紧跟指定字符串n的字符串./is(?= abc)/ "this is me and thatis abc" [/li]
[/ol]

正则的几种量词

"" 0 or more 等价于 { 0,}, 重复零次或更多
"+" 1 or more 等价于 { 1, }, 重复一次或更多
"?" 0 or 1 等价于{ 0,1 } , 重复零次或一次
"{n}" 重复n次
"{n,m}" 重复n到m次 。"a{2,4}" 将a重复2次,3次,或4次,所以匹配的字符为“aa”,“aaa”或者“aaaa”。
"{n, }" 重复的n次或者更多次 电话号匹配 /0\d{2,3}-\d{7}/
"
?" 重复任意次,但尽可能少重复。
/a.b/ 匹配 abcacccccbay7213b
asajbabsabjjsabczxsabacb
/a.
?b/ 匹配abcacccccbay7213b
asajbabsabjjsabczxsabacb
"+?" 重复一次或更多次,尽可能少重复/a.+?b/ abacbacbacbab
a.+? abacbaaaaacccbacbab
"??" 重复0次或1次尽可能少重复 /a.??b/ aaabaaaacbab
"{n,m}?" 重复n到m次,但尽可能少重复 /a{0,m}/ 匹配aaaaa 因为最少是0次,所以匹配出来为空
/a{0,2}/ abaabccbaaab
如果后面还有其他要求的话,这里有个权重问题,就是先匹配符合的字符串,在考虑非贪婪模式[/color]
"{n,}" 重复n次以上,但尽可能少重复
/a{0,}?b/ [color=#00b050]ab
aabccbaaababaaab
/a{0,}?/ 匹配空

常见的正则匹配场景

1 匹配色值 #ffbbbb #Fff #10bbfe #ffF
/#([0-9a-fA-F]{6})|(0-9a-fA-F){3}/g

2 匹配时间 13:09
/^(0?[0-9]|1[0-9]|[2][0-3]):(0?[1-9]|[1-5][0-9])$/

3 匹配操作系统文件路径
F:\m-jr-web\static.png
/^[a-zA-Z]:\([^\\:<>|"?\r\n/"]+\)([^\\:*<>|"?\r\n/]+)"?$])/

4 给数字加千分位
"123456789".replace(/(?!^)(?=(\d{3})+$)/g, ',') ===> 123,456,789

5 验证密码问题
密码长度6-12位,有数字,小写字母和大写字母组成,但至少包括两种字符
/((?=.[0-9])(?=.[a-z])|(?=.[0-9])(?=.[A-Z])|(?=.[a-z])(?=.[A-Z]))^[0-9A-Za-z]{6,12}$/
或者 /(?!^[0-9]{6,12}$)(?!^[a-z]{6,12}$)(?!^[A-Z]{6,12}$)^[0-9A-Za-z]{6,12}$/

6 校验url
/(http|ftp|https):\/\/[\w-]+(.[\w-]+)+([\w-.,@?^=%&:/~+#]*[\w-\@?^=%&/~+#])?/

评论 ( 0 )
最新评论
暂无评论

赶紧努力消灭 0 回复