正则表达式
正则表达式速查表
基本匹配
也就是执行普通的匹配,只要匹配出来即可。
"the" => The fat cat sat on the mat.
正则表达式是大小写敏感的,所以要匹配出来的字符串必须和正则表达式完全一致。
点运算
点运算符用于匹配一个字符串中的任意字符。但是不匹配换行符。如 .ar
可以匹配 car
、bar
、far
等。a.r
可以匹配 car
、bar
、far
等。bo.r
可以匹配 bore
、born
、bore
等。
".ar" => The car parked in the garage.
字符集
字符集用于指定连字符的范围。如 [abc]ar
可以匹配 car
、bar
、far
等。a[abc]r
可以匹配 car
、bar
、far
等。bo[abc]r
可以匹配 bore
、born
、bore
等。字符集中不关心顺序,如 [abc]ar
和 [cba]ar
是一样的。
"[Tt]he" => The fat cat sat on the mat.
与此同时 [.] 就表示匹配一个点号。
"[.]" => The fat cat sat on the mat .
否定字符集
指定不选的字符集。如 [^abc]ar
可以匹配 dar
、ear
、far
等,但是不匹配 car
、bar
、aar
等。
"[^T]he" => The fat cat sat on the mat.
重复次数
+
*
?
用于表示匹配子模式的次数。
*
*
表示匹配前面的子模式零次或多次。如 a*
可以匹配 a
、aa
、aaa
等,表示匹配多个以 a 开头的字符串。
"[a-z]*" => The fat cat sat on the mat #21.
T 没有匹配上是因为 T 不在 a-z 范围内。 #21
同理。
*
字符和.
字符搭配可以匹配所有的字符.*
。 *
和表示匹配空格的符号\s
连起来用,如表达式\s*cat\s*
匹配 0 或更多个空格开头和 0 或更多个空格结尾的 cat 字符串。
"\scat\s" => The fat cat sat on the concatenation.
+
+
表示匹配前面的子模式一次或多次。如 c.+t
可以匹配 cat
、cadat
、cadxdcaddt
等,表示匹配以 c 开头,以 t 结尾的字符串,中间可以有任意多个字符。包括空格,但不包括换行符。
"c.+t" => The fat cat sat on the mat.
?
表示在符号前面的字符为可选,即匹配零次或一次。如 colou?r
可以匹配 color
、colour
等,表示匹配 color 或者 colour。
[T]?he
=> The car is parked in the garage.
{}
用来限定一个或一组字符可以重复出现的次数,[0-9]{2,3}
表示匹配 2 到 3 个数字。
[0-9]{2,3}
=> The number was 9.9997 but we rounded it off to 10.0.
省略第二个数字表示匹配次数不限,如 [0-9]{2,}
表示匹配 2 个以上的数字。逗号也可以省略,如 [0-9]{2}
表示匹配 2 个数字。
(...)
特征标群
例如, 表达式 (ab)*
匹配连续出现 0 或更多个 ab
。如果没有使用 (...)
,那么表达式 ab* 将匹配连续出现 0 或更多个 b 。
我们还可以在 () 中用或字符 | 表示或。例如,(c|g|p)ar
匹配 car 或 gar 或 par.
"(c|g|p)ar" => The car is parked in the garage.
|
或
|
表示或。例如,c|g|p
匹配 c 或 g 或 p.
特殊字符转码
如果要匹配特殊字符,需要转码。如 .
表示匹配任意字符,如果要匹配 .
,需要转码为 \.
。
"(f|c|m)at." => The fat cat sat on the mat.
锚点
锚点用于匹配字符串的开始和结束。
^
^
表示匹配字符串的开始。如 ^The
可以匹配 The
Theme
等,表示匹配以 The 开头的字符串。
例如,在 abc 中使用表达式 ^a
会得到结果 a。但如果使用 ^b
将匹配不到任何结果。因为在字符串 abc 中并不是以 b 开头。
"^The" => The fat cat sat on the mat.
$
$
表示匹配字符串的结束。如 at$
可以匹配 cat
bat
等,表示匹配以 at 结尾的字符串。
例如,在 abc 中使用表达式 c$
会得到结果 abc。但如果使用 b$
将匹配不到任何结果。因为在字符串 abc 中并不是以 b 结尾。
简写字符集
字符 | 含义 |
---|---|
\d | 匹配一个数字字符。等价于 [0-9]。 |
\D | 匹配一个非数字字符。等价于 [^0-9]。 |
\s | 匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。 |
\S | 匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。 |
\w | 匹配所有字母数字字符,包括下划线。等价于 [A-Za-z0-9_]。 |
\W | 匹配所有非字母数字字符。等价于 [^A-Za-z0-9_]。 |
\f | 匹配一个换页符。等价于 \x0c 和 \cL。 |
\n | 匹配一个换行符。等价于 \x0a 和 \cJ。 |
\r | 匹配一个回车符。等价于 \x0d 和 \cM。 |
\t | 匹配一个制表符。等价于 \x09 和 \cI。 |
\v | 匹配一个垂直制表符。等价于 \x0b 和 \cK。 |
标志
标志用于控制正则表达式的匹配方式。
标志 | 含义 |
---|---|
i | 执行对大小写不敏感的匹配。 |
g | 执行全局匹配(查找所有匹配而非在找到第一个匹配后停止)。 |
m | 执行多行匹配。 |
/The/gi
=> The fat cat sat on the mat.
"/.at(.)?$/" => The fat
cat sat
on the mat.
# 匹配 mat
贪婪和懒惰
默认情况下,正则表达式是贪婪的,也就是说,它会尽可能多的匹配字符。例如,表达式 a.*b
将会匹配整个字符串 abab
,而不是 ab
。如果想要匹配尽可能少的字符,可以在 *
或 +
后面加上 ?
,使表达式变成懒惰模式。例如,表达式 a.*?b
将会匹配 ab
。
贪婪:
/(.*at)/
=> The fat cat sat on the mat.
懒惰:
/(.*?at)/
=> The fat cat sat on the mat.
示例
匹配邮箱
const email = 'example@foxmail.com';
const reg = /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(.[a-zA-Z0-9_-])+/
console.log(reg.test(email)); // true
匹配 URL
const url = 'https://www.baidu.com';
const reg = /^((https|http|ftp|rtsp|mms)?:\/\/)[^\s]+/
console.log(reg.test(url)); // true
匹配手机号
const phone = '13888888888';
const reg = /^1[3|4|5|7|8][0-9]{9}$/
console.log(reg.test(phone)); // true
匹配身份证号
const idCard = '110101199003077777';
const reg = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/
console.log(reg.test(idCard)); // true
匹配 IP 地址
const ip = '121.1.1.1';
const reg = /^(\d+)\.(\d+)\.(\d+)\.(\d+)$/
console.log(reg.test(ip)); // true
匹配日期
const date = '2020-01-01';
const reg = /^(\d{4})-(\d{2})-(\d{2})$/
console.log(reg.test(date)); // true
匹配 HTML 标签
const html = '<div>hello world</div>';
const reg = /<(\w+)>.*<\/\1>/
console.log(reg.test(html)); // true
匹配中文
const str = '你好,世界';
const reg = /[\u4e00-\u9fa5]/
console.log(reg.test(str)); // true