正则表达式是前端中比较重要的部分。
正则规则
一. 普通字符
字母、数字、汉字、下划线以及没有特殊定义的标点符号都是”普通字符”。
表达式中的普通字符,匹配时就正常匹配。
二.简单转义
一般不便于书写的,我们用/来表示
/r /n 回车和换行符
/t 制表符
\/
\ 符号表示转义。 表示该符号本身。因为正则中的符号是有特殊意义的。
表达式 | 可匹配 |
---|---|
\^ | 匹配 ^ 符号本身 |
$ | 匹配 $ 符号本身 |
. | 匹配小数点本身 |
举例1
表达式 “$d”,在匹配字符串 “haorooms$de” 时,匹配结果是:成功;匹配到的内容是:”$d”;匹配到的位置是:开始于8,结束于10。
三.与多种字符匹配的表达式
表达式 | 可匹配 |
---|---|
\d | 任意一个数字,0~9 中的任意一个 |
\w | 任意一个字母或数字或下划线,也就是 A~Z,a~z,0~9,_ 中任意一个 |
\s | 包括空格、制表符、换页符等空白字符的其中任意一个 |
. | 匹配除了换行符以外的任意的一个字符。 |
举例
对于字符串“abc123”
/\d\d/
匹配到的是 12
a.\d
匹配到aa1 因为.可以是任何字符(除了换行)
四 自定义能够匹配’多种字符’的表达式
使用方括号,包含一系列字符,能够匹配其中任意一个字符。用[^]包含一系列字符,则能够匹配其中字符之外的任意一个字符。同样的道理,虽然可以匹配其中任意一个,但是只能是一个,不是多个。
一个方括号就是一个表达式。
例如
对于字符串 “abc123”
/[abc5@]/
只是匹配到了一个a
/[bcd][bcd]/
匹配到了bc 。
特殊符号^
/[^abc]/
匹配1, 这个符号表示匹配[] 内容中的其他内容。
特殊符号-
/[f-k]/
匹配f~k之间的任意一个字母
五.修饰匹配次数的符号
常用的匹配多次符号。
(贪婪)
表达式 | 可匹配 |
---|---|
{n} | 表达式重复n次,比如:”\w{2}” 相当于 “\w\w”;”a{5}” 相当于 “aaaaa” |
{m,n} | 表达式至少重复m次,最多重复n次,比如:”ba{1,3}”可以匹配 “ba”或”baa”或”baaa” |
{m,} | 表达式至少重复m次,比如:”\w\d{2,}”可以匹配 “a12”,”_456”,”M12344” |
? | 匹配表达式0次或者1次,相当于{0,1} |
+ | 匹配表达式至少1次,相当于{1,} |
* | 匹配表达式0次或多次,相当于{0,} |
举例
a[cd]?
可以匹配 “a”,”ac”,”ad”, 表达式[cd] 可以是0次或1次
a+b
可以匹配 “ab”,”aab”,”aaab”…
\^*b
可以匹配”b”,”^^^b”…
六.其他一些代表抽象意义的特殊符号
在正则表达式中(不是方括号中):
表达式 | 可匹配 |
---|---|
^ | 与字符串开始的地方匹配,不匹配任何字符 |
$ | 与字符串结束的地方匹配,不匹配任何字符 |
$ | 匹配一个单词边界,也就是单词和空格之间的位置,不匹配任何字符 |
举例 ^
对于字符串 “xxx aaa xxx”
/^aaa/
匹配是失败的,因为这个匹配要求aaa是字符串开头才能匹配! 比如 “aaa xxs”
举例 $
对于字符串 “xxx aaa xxx”
/aaa$/
匹配也是失败的,因为这个匹配要求aaa结尾,只能匹配如
“xxx xxx aaa” 这种以aaa结尾的字符串。
举例 \b
/.\b/
在匹配字符串 “@@@abc”时,匹配是成功的;匹配的内容是”@a”
它本身不匹配任何字符,它要求匹配结果中所处的位置的左右两边,一边是\w范围,一边是非\w的范围
举例
/\bend\b/
匹配”weekend,endfor,end”时,匹配结果成功
匹配的内容是end。 因为只有最后一个end符合单词边界!
你可以理解\b就是匹配一个单词!
一些符号可以影响表达式内部的子表达式之间的关系
表达式 | 可匹配 |
---|---|
() | 1)在被修饰匹配次数的时候,括号中的表达式可以作为整体被修饰 2)取匹配结果的时候,括号中的表达式匹配到的内容可以被单独得到 |
举例
匹配字符串 “I’m Tom, he is Jack”
/Tom|Jack/
成功匹配Tom
匹配字符串”Let’s go go go!”
(go\s*)+
匹配”go go go” 因为是匹配go多次,括号中的内容被看做整体~~
方括号是只能作为一个字符。
匹配 $10.9,¥20.5
¥(\d+.?\d*)
成功,匹配的是¥20.5
取匹配结果括号中的内容被单独取到,即20.5
?表示对这个符号 . 匹配0次或1次。