RegExp
# 匹配字符规则
预定义类 | 量词符 | 边界符 |
---|---|---|
\d 匹配数字,相当于[0-9] | ***** 0个或者更多 | ^ 一行的开头 |
\D 匹配非数字,相当于[^0-9] | + 1个或更多,至少1个 | $ 一行的结尾 |
\w 匹配数字、字母、下划线,相当于[A-Za-z0-9_] | ? 0个或1个,一个Optional | \b 单词"结界"(word bounds) |
\W 匹配非数字、字母、下划线,相当于[^A-Za-z0-9_] | {min,max} 出现次数在一个范围内 | |
\s 匹配空格字符,如换行、制表,相当于[\t\r\n\v\f] | {n,} 重复n次或更多 | |
\S 匹配非空格字符,相当于[^\t\r\n\v\f] | {n} 重复n次 | |
. 匹配任何,任何的字符 |
[]
这个符号用来表示逻辑关系
或
,比如[abc]
表示a或者b或c.[-.]
表示符号-
或者.
号(注意这里,在[]
中的.
号代表的就是这个符号,但是如果在其外面,表示个匹配所有。 所以如果不在[]
之中,想要匹配’.’,就要通过转义符号\.
)特殊情况
-连接符是第一个字符时
比如
[-.]
的含义是连字符-
或者点符.
。 但是,如果当连字符不是第一个字符时,比如[a-z]
,这就表示是从字母a到字符z。[]中的^
^
在之前介绍中,是表示一行开头,但是在[]
中,有着不同的含义。[ab]
表示a或者b[^ab]
啥都行,只要不是a或b(anythings except a and b),相当于取反
()
除了使用
[]
表示或逻辑,()
也是可以的。用法是(a|b)
表示a或者b。重要 分组捕获(capturing groups)
对于电话号码212-555-1234,按照之前的做法
\d{3}-\d{3}-\d{4}
,这种匹配的方式,是将整个电话号码作为一个组(group)匹配起来。 我们把212-555-1234
这样的叫Group0
。这个时候,如果我们加了一个括号
\d{3}-(\d{3})-\d{4}
,那么匹配到的555
就叫Group1
。 以此类推,如果有两个小括号\d{3}-(\d{3})-(\d{4})
那么分组就是下面的情况:1 2 3
212-555-1234 Group0 555 Group1 1234 Group2
在js中,使用
/\d{3}-(\d{3})-\d{4}/
则有:
# 一些例子
# 现在想找5个字母组成的单词:\b\w{5}\b
# 请匹配所有可能的电话号码:
|
|
第一步: \d{3}[-.]\d{3}[-.]\d{4}
第二步: 为了能够匹配括号,可以使用?来,因为这是一个option选择。所以最后就成了
|
|
这里还是要说明,在[]中,特殊字符不需要转义,可以直接使用,比如[.()]
,但是在外面,是需要转义的\(
\.
等
# 匹配所有email
|
|
思路:
首先要想我到底相匹配什么,这里我想匹配的是
- 任何一个以words开头的,一个或更多
\w+
- 紧接着是一个
@
符号\w+@
- 接着有一个或者更多的words
\w+@\w+
- 接着一个
.
标点\w+@\w+\.
- 接着一个
com
net
或edu
\w+@\w+\.(com|net|edu)
还是提醒注意第四步的\.
转义符号
好了,这样几可以匹配以上的所有邮箱了。但是还有一个问题,因为邮箱用户名是可以有.
的,比如vincent.ko@126.com
其实仍然很简单,修复如下: [\w.]+@\w+\.(com|net|edu)
# 总结
/[-.(]/
在符号中的连字符-
放在第一位表示连字符本身,如果放在中间,表示"从..到..",比如[a-z]
表示a-z。[.)]
括号中的特殊符号不需要转义,就表示其本身(a|b)
也可表示选择,但是它有更强大的功能….